请问下面的这段代码:
[code]
public static void main(String[] args) throws Exception{
for(int i=0;i<20000;i++){
new Thread(new Runnable(){
public void run(){
try{
Thread.sleep(100000);
}
catch(Exception e){
// ignore
}
}
}).start();
}
}
[/code]
假设OS环境为Linux,JDK为Oracle JDK5/6/7,并采用此参数执行时:-Xss1m此Java进程占用的VIRT和RES分别会是多少,原因是?
另外,在执行此段代码时,可能会出现java.lang.OutOfMemoryError: unable to create new native thread,请问如出现此异常,可能是什么原因造成的?
如将上面的i<20000改为i<40000,再执行时(慎重执行此操作),同样可能会出现java.lang.OutOfMemoryError: unable to create new native thread,并且此时在shell中执行ls等操作时,可能会出现Resource temporarily unavailable,可能是什么原因造成的?
明天将来发文对上面的问题进行回答。
一个线程占用1m的空间,一直循环下去将会导致内存空间不足,进而占用swap区域,因此报第一个错
第二个错是因为swap区域亦不足,导致ls等命令都无空间可运行
倒是让我想起了fork炸弹。。。
手工测试下。我这边ls: bash:for:无法分配内存