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栈中、并指向堆中的两个实例。

如下图所示:



 

 

转载于:https://my.oschina.net/tester/blog/670582

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值