我在计算机上以及在具有jvm参数的客户计算机上运行以下程序-Xmx1024m
。
int i=0;
while(true)
{
new Thread().start();
i++;
}
这两台机器都有windows 7
和jdk 7 32bits
。
在我的机器上,当我大约3M时,我终止了该过程。在客户的机器上,OutOfMemoryError: unable to create new native Thread
当i约为8K时,程序抛出一个。
我使用jvm parameter重试了该实验-Xmx24m
。在这种情况下,当i约为24K时,客户计算机上的程序会抛出相同的错误。如果我使用减小线程的堆栈跟踪到128K,也有一个小的增量-Xss
。
线程终止时,似乎客户的计算机没有释放线程的堆栈。
有人遇到过这个问题吗?有任何想法吗?
您依赖于有关线程启动和随后终止的速度的详细信息。在一台机器上,线程生成过程会超过线程死亡进程,而在另一台机器上,它恰好相反。您的计数器仅跟踪创建的线程总数,而不跟踪任何时间点存在的线程净数量。
要点:测试代码无助于证明有关运行时的任何重要信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句