最近我在调整线程池时一直在查看代码的行为。我注意到虚拟内存峰值使用量随着我添加到线程池的每个新线程的增长而增长,其方式与线程文本大小或其他任何内容无关。
我创建了一个简单的测试程序,在创建每个新线程后打印出该进程的VmPeak值(通过解析/ proc / self / status的内容),并注意它是如何遵循某种模式的(VmPeak = OriginalVmPeak * numberOfThreads),直到达到一定水平时才饱和。
我对操作系统和虚拟内存了解不少,我知道虚拟内存是指从进程的角度来看可以寻址的任何东西(包括库等),但为什么会有相关性线程号,如果它们共享相同的寻址空间?为什么在达到一定数量的线程后它会饱和?