Memory 清理子进程地址空间的方法,即使它仍然存在

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

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

因此,主进程虚拟内存地址空间将增加。因此,如果我错了,请纠正我的错误,如果进程在日志时间内运行,请帮助了解这有一些问题。

这里有几点

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

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


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

那么虚拟内存增加的原因是什么?当您从应用程序启动应用程序以跟踪单个内存分配以及相关的调用堆栈时,该过程是用c++编写的。您可以看到虚拟内存地址空间将如何增加。