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

程序运行内存状态

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用赋值或缺省值来将


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容