开发多线程应用注意

开发多线程应用注意

例如:32位的Window限制为2GB。虚拟机提供了参数来控制Java堆和方法区的这两部分内存的最大值。
2GB(操作系统限制)减去Xms(最大堆容量),再减去MaxPermSize(最大方法区容量),程序计数器消耗内存很小(忽略不计)。如果虚拟机进程本省耗费的内存不在技算之内, 剩下的内存就由 虚拟机栈本地方法栈“瓜分”了。每个线程分配到的栈容量越大,可以建立的线程数量自然就少了,建立线程时就越容易把剩下的内存耗尽。
虚拟机在默认参数,栈深度在大多数情况下(以为每个方法压入栈的帧大小并非不是一样的,所以只能说在大多数情况下)到达1000~2000完全没有问题,对于正常的方法调用(包括递归),这个深度应该可以够用了。但是,如果建立过多线程导致的内存溢出,在不能减少线程数或者更换64位虚拟机的情况下,就只能通过减少最大栈和减少栈容量来换取更多的线程。

发布了30 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wg22222222/article/details/83051184