如何获取当前jvm各个内存配置的值
默认值
1.堆最大 默认值物理机的1/4
2.堆最小
3.栈最小 默认值100K左右 不能比这个最小值还要小 否则会报错jvm
影响因素
1.上面的3个
2.
3.
4.物理机的内存
如何测试?代码?
package pMaxThread;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 测试jvm最大线程数
*
* @author gongzhihao
*
*/
public class TestThread extends Thread {
private static final AtomicInteger count = new AtomicInteger();
public static void main(String[] args) {
while (true)
(new TestThread()).start();
}
@Override
public void run() {
System.out.println(count.incrementAndGet());
//下面这段代码的作用是 不让线程结束(具体是睡眠 但不结束) 目的是线程不结束 就占用了内存空间 这样才可以测试jvm总共可以创建多少个线程 如果没有这段代码 那么可以无限创建新的线程 因为之前的线程已经结束销毁掉了
while (true)
try {
Thread.sleep(Integer.MAX_VALUE); // 线程睡眠
} catch (InterruptedException e) {
break;
}
}
}
测试结果
jvm参数
-Xmx512m -Xms512m -Xss5m
4065
4066
4067
4068
4069
4070 //5000个 就报错了 然后死机 自动关机 mac pro
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:717)
at pMaxThread.TestThread.main(TestThread.java:10)