码迷,mamicode.com
首页 > 其他好文 > 详细

读书笔记-深入理解JVM虚拟机-1.JVM-Stack造成的OOM的理解

时间:2015-07-14 11:34:29      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:虚拟机   读书笔记   

-Xss128k:这个JVM参数用来配置栈的大小为128k
因为栈是线程私有的(不清楚的可以去了解下JVM虚拟机结构),所以如果我们启动一个线程,并且在这个线程中调用一个递归,就会产生该异常。


/**
 * VM Args:-Xss128k
 * 
 */
public class JavaVMStackSOF {


	private int stackLength = 1;


	public void stackLeak() {
		stackLength++;
		stackLeak();
	}


	public static void main(String[] args) throws Throwable {
		JavaVMStackSOF oom = new JavaVMStackSOF();
		try {
			oom.stackLeak();
		} catch (Throwable e) {
			System.out.println("stack length:" + oom.stackLength);
			throw e;
		}
	}
}




分析:
1.主线程中调用JavaVMStackSOF的stackLeak()方法 而在stackLeak()中也是调用自身
2.每调用自身一次就会生成一个栈帧(栈帧分为三部分:局部变量区(Local Variables)、操作数栈(Operand Stack)和帧数据区(Frame Data)),所以会占用一定的空间
3.我们设置的-Xss128k 也就是说主线程的栈空间只有128k。当栈空间不足的时候就会爆出OOM异常 - Exception in thread "main" java.lang.StackOverflowError

版权声明:本文为博主原创文章,未经博主允许不得转载。

读书笔记-深入理解JVM虚拟机-1.JVM-Stack造成的OOM的理解

标签:虚拟机   读书笔记   

原文地址:http://blog.csdn.net/u010708203/article/details/46873973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!