博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java虚拟机 jvm java堆 方法区 java栈
阅读量:7007 次
发布时间:2019-06-28

本文共 719 字,大约阅读时间需要 2 分钟。

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

如下图所示:

 

 

你可能感兴趣的文章
MySQL中Procedure事务编写基础笔记
查看>>
Swift
查看>>
CPU核数跟多线程的关系
查看>>
hadoop mapreduce 计算平均气温的代码,绝对原创
查看>>
使用python实现后台系统的JWT认证(转)
查看>>
Count and Say
查看>>
.GB级数据库分区实现高性能
查看>>
PHP安全编程:register_globals的安全性 全局变量注册(转)
查看>>
SQL批处理与事务控制
查看>>
POJ - 2391 最大流
查看>>
WCF学习资料汇总
查看>>
15-Flutter移动电商实战-商品推荐区域制作
查看>>
LeetCode-Best Time to Buy and Sell Stock I&&II
查看>>
Java compiler level does not match解决方法(转)
查看>>
ROS初级教程 cmake cmakelist.txt 的编写教程
查看>>
Comparing Inline and Multi-Statement Table valued UDFs
查看>>
python 机器学习
查看>>
php如何控制客户端生成缓存
查看>>
不错的在线印章生成器网站
查看>>
Arduino控制LCD显示helloworld
查看>>