java虚拟机 jvm java堆 方法区 java栈
2017-08-19 15:39
405 查看
java堆是java应用程序最密切的内存空间。
差点儿全部的对象都存在堆中。java堆全然自己主动化管理,通过垃圾回收机制,垃圾对象会自己主动清理。不须要显式释放。
依据java垃圾回收机制的不同。java堆可能有不同的结构。
最常见的是将整个java堆分为新生代和老年代。跟人类几乎相同了。老龄化就有可能找上帝去了,新生代存放新对象或者年龄不大的对象,老年代存放老年对象。新生代有可能分为eden区、s0区和s1区,s0区和s1区也被称之为 from 到to区域。他们是两块大小相等能够互换的内存空间例如以下图所看到的:
在大多数情况下。对象首先被分配在eden区,再一次新生代回收后,假设对象还存在,则会进入s0或者s1,之后没经过一个新生代回收,年龄+1.当对象年龄达到一定条件后,就会老龄化进入老年代。
以下一个简单的实例展示java堆、java方法区、java栈之间的关系。代码例如以下:
package cn.xhgg.test; public class HeapTest { private int id; public HeapTest(int id) { this.id = id; } public void show() { System.out.println("id: "+id); } public static void main(String[] args) { HeapTest h1 = new HeapTest(1); HeapTest h2 = new HeapTest(3); h1.show(); h2.show(); } }
HeapTest 实例引用类型肯定分配在堆中、h1、h2局部变量存放在java栈中、并指向堆中的两个实例。
例如以下图所看到的:
相关文章推荐
- java虚拟机 jvm java堆 方法区 java栈
- java虚拟机 jvm java堆 方法区 java栈
- 80端口占用异常解决方法java.net.BindException: Address already in use: JVM_Bind:80(或8080)
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- Java heap space的设置与在myeclipse启动时分配JVM heap大小的方法
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- JAVA虚拟机(JVM)和JAVA垃圾回收机制(JAVA GARBAGE COLLECTION)---因为刚开始学习,有部分语言不太准确,请指出,谢谢!
- 从几个sample来学习Java堆,方法区,Java栈和本地方法栈
- java中对struts中token的使用方法以及jvm学习--策略文件简述
- java.lang.OutOfMemoryError: PermGen space及其解决方法--myeclipse中配置tomcat的jvm
- JVM:Java Virtual Machine,Java虚拟机。
- No JVM could be found on your system.Please define EXE4J_JAVA_HOME问题解决方法(版本问题)
- Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
- JVM内存不足的解决方法, java.lang.OutOfMemoryError: Java heap space
- Java第三课 Java中包的概念,类的说明符、方法的说明符、对象的销毁(JVM垃圾会受器的演示),Java中接口理解与掌握。
- No JVM could be found on your system.Please define EXE4J_JAVA_HOME问题解决方法
- 在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。手动产生堆栈文件的方法是使用kill -3
- 从JVM内存管理的角度谈谈静态方法和静态属性 和 java对象引用与JVM自动内存管理
- 编译android遇到java虚拟机堆内存不够的问题 java.lang.OutOfMemoryError: GC overhead limit exceeded 解决方法
- 各类Java heap space 解决方法,并通过java代码获取JVM的相关信息,所在操作系统的信息(包含eclipse&myeclipse的调试的内存设置)