关于JVM加载内存图学习小密招
先看如下代码:
Person.java
public class Person {
private String name;
private int age;
static int count = 0;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHi() {
System.out.println("姓名:"+this.name+",年龄:"+this.age);
}
}
TestPerson.java
public class TestPerson {
public static void main(String[] args) {
Person person = new Person("kallen",20);
person.sayHi();
}
}
对象初始化步骤:
1.虚拟机加载TestPerson类(包含准备,链接,初始化),提取类型信息(包含计算申请多大堆空间等),存储到方法区。
2. 通过保持在方法区的字节码(.class) 虚拟机开始执行main方法,main方法入栈(进入方法执行堆栈区)箭头①方法入栈。
3. 进入main方法的第一条指令new Person("kallen",20);虚拟机看到new 就知道要分配空间了,去方法区找Person类,没找到就装载Person类,并把Person类的类型信息存储到方法区。
通过存储在方法区中Person 类的类型信息确定了实例对象需要分配的空间大小,在堆区分配指定大小的内存,并把实例对象的成员变量初始化为默认值(int初始化为0,引用变量初始为null)。此时,实例对象的内存分配完毕。这是new操作符的第一步。
new操作的第二步开始执行,调用构造方法,完成对象的初始化工作。然后把对象在堆空间的地址赋值给引用类型变量person。整条Person person = new Person("kallen",20);指令执行完成。
4. 调用sayHi(),通过person持有的引用,找到堆中的实例对象,通过实例对象持有的本类在方法区的引用,找到本类(Person)的类型信息,然后定位到sayHi方法,sayHi方法入栈,开始执行方法中的字节码。图中箭头④调用方法。
关于JVM加载内存图学习小密招的更多相关文章
- Android内存优化————加载长图
项目中总会遇到加载长图的需求,图片的长度可能是手机长度的很多倍,也就是需要通过滑动来查看图片.比较简单的实现方式就是使用ScrollView来加载长图,但是这样做有一个很严重的问题,就是内存消耗严重. ...
- JVM学习(二)JVM加载类
一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- Java提高篇——JVM加载class文件的原理机制
在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后 ...
- JVM加载class文件的原理
当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件.那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做[加载 ].加载完成之后,我们就可以进行一系列 ...
- 基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)
基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 个人技术博客:http://www.cnblogs.com/M ...
- JVM加载class文件的原理机制(转)
JVM加载class文件的原理机制 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的 ...
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...
- JVM加载类的过程,双亲委派机制中的方法
JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载 1.1.加载 类的加载阶段,主要是获取定义此类的二进 ...
- 关于JVM加载class文件和类的初始化
关于JVM加载class文件和类的初始化 1.JVM加载Class文件的原理机制 1.1.装载 查找并加载类的二进制数据 1.2.链接 验证:确保被加载类的正确性.(安全性考虑) 准备:为类的静态变量 ...
随机推荐
- JavaScript 查找图中连接两点的所有路径算法
1.把图看成以起点为根节点的树 2.使用深度遍历算法遍历路径 3.遍历到节点为目标节点时,保存这条路径 find2PointsPath(sourceId, targetId) { const { no ...
- ios-时间换算
经常会遇到时间转换的,在此收藏一个时间换算的方法〜 #pragma mark 时间换算 + (NSString *)setcreateTime:(NSString *)str { //yyyy-MM- ...
- python3 多线程爆破ftp、mysql、ssh
当然 也支持ip 为 127.0.0.1-255 这样的 字典放到 dict 目录里 链接: https://pan.baidu.com/s/1htchOyN5hK9nmZlWfTiFzA 密码: v ...
- Java...点点点语法
https://blog.csdn.net/IT_faquir/article/details/49131173
- Spring boot配置logback
在application-dev.yml增加配置 配置文件的路径为 rescoures/evn/dev/logback-spring.xml <?xml version="1.0&qu ...
- CWMP开源代码研究6——libcwmp动态库开发
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 为了使程序具有通用性,便于扩展和维护.采用了"模块"插入的思想.将设备业务相 ...
- sunzl is not in the sudoers file.This incident will be reported
Description: [sunzl@localhost nuc900bsp$] ./install.sh sorry!you are not the root !! [sunzl@localhos ...
- 一个HTTP打趴80%面试者
面试多年,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验.请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正规军. 起因 面试官:请问你了解HTTP协 ...
- listener.starting()源码探究
容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就 ...
- 平安技术开放日质量保证技术专场第一期 [附部分 ppt]
4月8号在上海平安大厦,平安证券和Tester联合举办了一场质量保证技术专场,附上部分PPT 平安技术开放日介绍 ppt下载 A/B测试的大数据架构实践 链接: http://pan.baidu. ...