清理子进程地址空间甚至还活着的方法

时间:2013-01-22 04:58:37

标签: memory process virtual parent

在我的过程中,我创建了10个线程,并将使用这些线程直到我的应用程序处于活动状态。每个线程每次都会执行一些文件输入和输出操作。所以问题是每次线程开始执行然后我的进程虚拟内存都会增加。 我的分析是,当一个文件输入输出任务被允许到线程时,文件将被加载到线程地址空间,当线程开始复制文件时,复制完成后,线程地址空间将不会被清除为线程没有退出。因此,如果我再次向线程分配另一个任务,那么新文件将被加载到线程地址空间。

因此主进程虚拟内存地址空间将增加。所以,如果我错了,请纠正我,并且如果进程运行了日志时间,也有助于知道这有一些问题。

1 个答案:

答案 0 :(得分:0)

这里有一些事情。

1)线程没有自己的内存地址空间。流程做。 (但是,线程确实获得了自己的线程本地存储。)

2)在托管语言中,在运行垃圾收集器之前,不会清理对象并压缩堆。垃圾收集器在需要之前不会运行(例如程序接近内存不足)。只要对象没有对它的强引用(没有任何运行可以到达它),那么当程序需要清理它时,对象将被清理,并且您不需要做任何其他事情。但是,如果您希望垃圾收集器尽早运行,请告诉它。

顺便说一句,如果在许多不同的线程中通常需要资源,您可以考虑为它们提供某种全局缓存。然而,早期优化是一个严重的罪恶,所以在你确定它解决了一个真正的问题之前不要全力以赴。