【发布时间】:2019-11-01 19:28:12
【问题描述】:
我有几个 jvm 参数,但理解起来有些困难。
- 第一个问题是关于参数 -Xms20m 和 -Xss2M(第一个是堆大小,第二个是线程堆栈大小),m 和 M 是否具有相同的含义并且都是 MB?
- 第二个问题是,我有以下代码 sn-p,由于堆栈大小设置为 512M,因此我预计会很快出现运行时错误,但该代码会导致我的操作系统卡住并且永远不会给我运行时错误,有谁知道这是为什么?
谢谢
/**
*VM Args:-Xss512M
*/
public class JavaVMStackOOM{
private void noStop(){
while(true){
}
}
public void stackLeakByThread(){
while(true){
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
noStop();
}
});
thread.start();
}
}
public static void main(String[]args)throws Throwable{
JavaVMStackOOM oom=new JavaVMStackOOM();
oom.stackLeakByThread();
}
}
【问题讨论】:
-
请每个问题只问 一个 问题,您问的是两个完全不同的问题,这使您的问题过于宽泛。作为一个简短的评论:使用 512 兆字节的堆栈大小是荒谬的。正常值范围从几千字节到一兆字节左右。