您的位置:首页 > 编程语言 > Java开发

Java中的栈、堆和方法区

2017-09-12 20:28 106 查看
栈是用来保存局部变量、对象的引用和方法调用的现场;
堆是用来保存对象的实例,它也是垃圾收集器管理的主要区域,由于现在的垃圾收集器都是采用分代收集算法,所以堆空间还分为新生代和老年代,其中新生代又进一步分为Eden、Survivor,而Survivor分为from Survivor和to Survivor,老年代为Tenured;
方法区主要用来存放类的信息、常量、静态变量。堆和方法区都是线程共享的,程序中的字面量如直接书写的100、“Hello”和常量都存放在常量池中,并且常量池是方法区的一部分。
栈空间操作起来最快,但是空间很小,通常大量的对象都是存放在堆中,栈和堆的大小都可以通过JVM的启动参数进行设置,栈空间用光了会产生StackOverflowError,堆和常量池空间不足会导致OutOfMemoryError。

String str = new String("hello");


上面的语句中变量str放在栈上,new创建出来的字符串对象放在堆上,而“Hello”这个字面量是放在方法区的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 方法区