java虚拟机 jvm java堆 方法区 java栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java虚拟机 jvm java堆 方法区 java栈相关的知识,希望对你有一定的参考价值。

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 实例引用类型肯定分配在堆中、h1h2局部变量存放在java栈中、并指向堆中的两个实例。

例如以下图所看到的:

技术分享


 

 





以上是关于java虚拟机 jvm java堆 方法区 java栈的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机之JVM系统和内存模型

Java 虚拟机(JVM)之基本概念

JVM 内存结构

JVM内存分为哪几部分?各个部分的作用是什么?

JVM运行时数据区--堆

Java虚拟机(JVM)详解