博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM学习01:内存结构
阅读量:6038 次
发布时间:2019-06-20

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

JVM学习01:内存结构

写在前面:本系列分享主要参考资料是  周志明老师的《深入理解Java虚拟机》第二版。

内存结构知识要点Xmind梳理

 

 

案例分析

分析1

package com.hs.jvm;public class JVMTest1 {    public static void main(String[] args){        /**         * intger1 和 intger2都是Integer的引用,线程运行时位于虚拟机栈中新建的栈帧中         * 该引用持有指向堆中的Integer实例的引用,而两实例在堆中的地址是不同的        */        Integer intger1 = new Integer(1);        Integer intger2 = new Integer(1);        /**int1和int2都指向方法区中常量池中的同一内存空间*/        int int1 = 1;        int int2 = 1;        System.out.println(intger1 == intger2);//false        System.out.println(int1 == int2);//true    }}

 

 分析2

package com.hs.jvm;/**JVM在类加载的时候,将类的信息放入方法区*/public class JVMTest2 {    /**J将方法的信息放入方法区*/    public static void main(String[] args){        /**         * People类:People类的信息在方法区中         * People实例对象:new出来的People实例对象在堆中,并持有对方法区People类信息的引用         * p:p是对new出来的People实例对象的引用,放在栈中,指向new出来的People实例对象内存地址         * */        People p = new People("TYJ", 18);        /**         * 执行playing方法时         * 先根据p定位堆中的People实例对象         * 再根据People实例对象找到方法区People类的playing方法字节码         * 最后执行playing方法         * */        p.play();//TYJ is playing    }    /**main方法的执行逻辑     * (1)用户创建了一个People对象,运行时JVM首先会去方法区寻找该对象的类型信息,没有则使用类加载器classloader将People.class字节码文件加载至内存中的方法区,并将People类的类型信息存放至方法区。     * (2)接着JVM在堆中为新的People实例分配内存空间,这个实例持有着指向方法区的People类型信息的引用,引用指的是类型信息在方法区中的内存地址。     * (3)在此运行的JVM进程中,会首先起一个线程跑该用户程序,而创建线程的同时也创建了一个虚拟机栈,虚拟机栈用来跟踪线程运行中的一系列方法调用的过程,每调用一个方法就会创建并往栈中压入一个栈帧,栈帧用来存储方法的参数,局部变量和运算过程的临时数据。上面程序中的p是对People的引用,就存放于栈中,并持有指向堆中People实例的内存地址。     * (4)JVM根据p引用持有的堆中对象的内存地址,定位到堆中的People实例,由于堆中实例持有指向方法区的People类型信息的引用,从而获得add()方法的字节码信息,接着执行add()方法包含的指令。     */}------------------------------------------------------------------package com.hs.jvm;public class People {    private String name;    private int age;    public People(String name, int age) {        this.name = name;        this.age = age;    }    public void play(){        System.out.println(this.name + " is playing");    }}

 

转载于:https://www.cnblogs.com/wobuchifanqie/p/10772323.html

你可能感兴趣的文章
学习JAVA自我总结
查看>>
Codeforces D - The Child and Zoo
查看>>
数据结构与算法
查看>>
小小小游戏
查看>>
windows ntp安装及调试
查看>>
MYSQL 备份用户权限
查看>>
上传和设置Mime类型
查看>>
使用python处理selenium中的鼠标悬停问题
查看>>
071:【Django数据库】ORM聚合函数详解-Avg
查看>>
Hadoop在安装snappy过程中的问题
查看>>
py 的 第 7 天
查看>>
Bounce(弹走绵羊)lct裸题
查看>>
BZOJ3238 [Ahoi2013]差异
查看>>
mybatis的动态sql中collection与assoction
查看>>
机器学习二分类模型评价指标:准确率\召回率\特异度等
查看>>
<jsp:include page>和<%@ include file%>的区别
查看>>
js文件、图片上传(原生方法和jquery的ajax两种都有)
查看>>
JS-DOM的知识点及应用
查看>>
webservice测试窗体只能用于来自本地计算机的请求
查看>>
多列等高布局
查看>>