(已完成)jvm-最大线程数.md

451 阅读1分钟

如何获取当前jvm各个内存配置的值

blog.csdn.net/MinFrog/art…

默认值

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)