Java中的栈、堆和方法区
2017-09-12 20:28
106 查看
栈是用来保存局部变量、对象的引用和方法调用的现场;
堆是用来保存对象的实例,它也是垃圾收集器管理的主要区域,由于现在的垃圾收集器都是采用分代收集算法,所以堆空间还分为新生代和老年代,其中新生代又进一步分为Eden、Survivor,而Survivor分为from Survivor和to Survivor,老年代为Tenured;
方法区主要用来存放类的信息、常量、静态变量。堆和方法区都是线程共享的,程序中的字面量如直接书写的100、“Hello”和常量都存放在常量池中,并且常量池是方法区的一部分。
栈空间操作起来最快,但是空间很小,通常大量的对象都是存放在堆中,栈和堆的大小都可以通过JVM的启动参数进行设置,栈空间用光了会产生StackOverflowError,堆和常量池空间不足会导致OutOfMemoryError。
上面的语句中变量str放在栈上,new创建出来的字符串对象放在堆上,而“Hello”这个字面量是放在方法区的。
堆是用来保存对象的实例,它也是垃圾收集器管理的主要区域,由于现在的垃圾收集器都是采用分代收集算法,所以堆空间还分为新生代和老年代,其中新生代又进一步分为Eden、Survivor,而Survivor分为from Survivor和to Survivor,老年代为Tenured;
方法区主要用来存放类的信息、常量、静态变量。堆和方法区都是线程共享的,程序中的字面量如直接书写的100、“Hello”和常量都存放在常量池中,并且常量池是方法区的一部分。
栈空间操作起来最快,但是空间很小,通常大量的对象都是存放在堆中,栈和堆的大小都可以通过JVM的启动参数进行设置,栈空间用光了会产生StackOverflowError,堆和常量池空间不足会导致OutOfMemoryError。
String str = new String("hello");
上面的语句中变量str放在栈上,new创建出来的字符串对象放在堆上,而“Hello”这个字面量是放在方法区的。
相关文章推荐
- 如何在Java中实现远程方法调用
- JAVA如何调用C/C++方法
- Java语言编程中更新XML文档的常用方法
- Java 的JDBC 数据库连接池实现方法
- 深入Java面向对象之预备篇(2.方法研究)
- java窗体运行时最大化及关闭方法示例
- java操作Excel的一种方法
- Java 的JDBC 数据库连接池实现方法
- 改进JAVA字符串分解的方法
- (Z)用java直接连接Access数据源的方法
- 将Java的class文件转为EXE文件的八种方法
- JAVA通过JNI调用本地C语言方法
- 将Java的class文件转为EXE文件的八种方法
- Java更新XML的四种常用方法简介
- 比较两种php调用Java对象的方法
- 一些非常有用的JAVA常用方法,可以省力很多啊!!
- 一些非常有用的JAVA常用方法,可以省力很多啊!! xiaoyou [原作]
- 在 Windows 中实现 Java 本地方法
- 从一道测试题分析java中的方法重载(overload)
- Java远程方法调用 4