精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-23
最后修改:2010-03-24
一、认识问题:
首先我们通过下面这个
测试程序
来认识这个问题: import java.util.concurrent.CountDownLatch; public class TestNativeOutOfMemoryError { public static void main(String[] args) { for (int i = 0;; i++) { System.out.println("i = " + i); new Thread(new HoldThread()).start(); } } } class HoldThread extends Thread { CountDownLatch cdl = new CountDownLatch(1); public HoldThread() { this.setDaemon(true); } public void run() { try { cdl.await(); } catch (InterruptedException e) { } } }
不指定任何JVM参数,eclipse中直接运行输出,看到了这位朋友了吧:
二、分析问题: 这个异常问题本质原因是我们创建了太多的线程,而能创建的线程数是有限制的,导致了异常的发生。能创建的线程数的具体计算公式如下:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-24
即创建的线程所占内存在JVM之外,请问 MaxProcessMemory在某特定OS下是固定的吗,以及ThreadStackSize在什么地方进行配置?
|
|
返回顶楼 | |
发表时间:2010-03-24
楼主的意思表达清楚了, 不过有些似乎不是太严谨.
说到JVMMemory, JVMMemory并不是由Xmx指定的, 当然这个和JVM的实现厂商有关. 请问你用的是Sun的JVM吗? 关于这异常, 这段时间我也遇到过, 实际上它并不是由JVM本身抛出的, 而是从本地内存抛出的。遗憾的是, Java的说明文档并没有对它进行详细阐述。 java.lang.OutOfMemoryError: unable to create new native thread This kind of message is seen when you have an excessive number of threads or if the native memory is exhausted and a thread is attempting to be created. http://dongyajun.iteye.com/blog/622488 |
|
返回顶楼 | |
发表时间:2010-03-24
Joo 写道 即创建的线程所占内存在JVM之外,请问 MaxProcessMemory在某特定OS下是固定的吗,以及ThreadStackSize在什么地方进行配置?
MaxProcessMemory在一个特定的OS中试固定的,比如32 Windows XP 的 MaxProcessMemory值为 2G;ThreadStackSize这个可以通过jvm 启动参数 -Xss配置,如 指定ThreadStackSize为512k,那么 -Xss512k 就可以了。 |
|
返回顶楼 | |
发表时间:2010-03-24
david.org 写道 楼主的意思表达清楚了, 不过有些似乎不是太严谨.
说到JVMMemory, JVMMemory并不是由Xmx指定的, 当然这个和JVM的实现厂商有关. 请问你用的是Sun的JVM吗? 关于这异常, 这段时间我也遇到过, 实际上它并不是由JVM本身抛出的, 而是从本地内存抛出的。遗憾的是, Java的说明文档并没有对它进行详细阐述。 java.lang.OutOfMemoryError: unable to create new native thread This kind of message is seen when you have an excessive number of threads or if the native memory is exhausted and a thread is attempting to be created. http://dongyajun.iteye.com/blog/622488 对,我用是Sun的JVM,Sun 的JVM 是通过-Xmx 来指定最大值的;其它的JVM实现怎么指定,我没接触过,不太清楚,呵呵。 |
|
返回顶楼 | |
发表时间:2010-04-02
谢谢,解决了疑问
|
|
返回顶楼 | |
发表时间:2011-03-15
我自己用jar直接跑
java -cp JavaMainTest-1.0-SNAPSHOT.jar com.alibaba.b2b.qa.JavaMainTest -Xms1024m -Xmx1024m -XX:MaxPermSize=128m 通过修改上面的参数,竟然没用,始终是5063个线程。真奇怪 |
|
返回顶楼 | |
浏览 5715 次