0

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

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

4

1 回答 1

0

这里有几件事。

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

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

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

于 2013-01-22T05:02:10.880 回答