javase part5 - 程序运行过程内存分析

2017-11-14  本文已影响0人  不再饿肚子给人送饭
程序运行内存状态
image.png
栈是一种数据结构,而堆是用来动态分配内存的

内存中的对象

程序在运行时,一些内存空间分配给了数据,这个数据在空间逻辑上分为两个部分,堆和栈.基本类型分配在栈中,Java 对象分配在堆中

//把一些字节分配给了引用变量 book, book 的初始值为null,因为还没有对象赋给它
Book book;
//此行代码会创建一个Book的实例,存储在堆中,并将这个实例的地址赋给引用变量 book
book = new Book();
两个变量引用同一个对象.png
创建两个不同的对象.png
类中包含另一个类.png
加载,连接和初始化

jvm执行一个类会发生什么情况

1.加载: jvm将java类的二进制形式加载到内存中(.class文件)
(并可以将它缓存在内存中,以便将来再次调用,如果没有找到将会引发 ClassNotFoundException)
2.连接: 在这个阶段会做三件事:验证,准备,解析(可选)
2.1验证: jvm根据java编程语言和jvm的语义要求检查这个二进制形式
2.2准备: 准备要执行的指定的类,这包含给这个类的静态变量和其他数据分配内存空间
2.3.解析: 检查制定类是否引用了其他类/接口,能否找到和加载其他的类/接口,这些检查将针对被引用的类/接口递归执行
解析可以在后面执行,真正被引用的时候进行解析
3.初始化: jvm用赋值或缺省值来将


上一篇 下一篇

猜你喜欢

热点阅读