写点什么

JVM 真香系列:方法区、堆、栈之间到底有什么关系

用户头像
田维常
关注
发布于: 2020 年 11 月 11 日

关注“Java后端技术全栈”



回复“000”获取大量电子书





栈指向堆





如果在栈帧中有一个变量,类型为引用类型,比如:



package com.tian.my_code.test;
public class JvmCodeDemo {
    public  Object testGC(){
        int op1 = 10;
        int op2 = 3;
        Object obj = new Object();
        Object result=obj;
        return result;
    }
}




这时候就是典型的栈中元素obj指向堆中的Object对象,result的指向和obj的指向为同一个对象。





使用命令



javac -g:vars JvmCodeDemo.java



进行编译,然后再使用



javap -v JvmCodeDemo.class >log.txt



然后打开log.txt文件





如果还有疑惑,可以再结合上面的字节码图和关系图来看,这样理解就更轻松些。



方法区指向堆



方法区中会存放静态变量,常量等数据。



如果是下面这种情况,就是典型的方法区中元素指向堆中的对象。





堆指向方法区



方法区中会包含类的信息,对象保存再堆中,创建一个对象的前提是有对应的类信息,这个类信息就在方法区中。





Java对象内存布局





一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充





推荐阅读:



《Java并发编程的艺术》.pdf



《高效程序员的45个习惯:敏捷开发修炼之道》.pdf



《Java Web企业项目实战》.pdf



关注公众号“Java后端技术全栈”



免费获取500G最新学习资料



发布于: 2020 年 11 月 11 日阅读数: 22
用户头像

田维常

关注

关注公众号:Java后端技术全栈,领500G资料 2020.10.24 加入

关注公众号:Java后端技术全栈,领500G资料

评论

发布
暂无评论
JVM真香系列:方法区、堆、栈之间到底有什么关系