JVM——Java内存区域

2019-05-01  本文已影响0人  双核孤城

《深入理解Java虚拟机》学习笔记

运行时数据区域

image

程序计数器

当前线程执行的行号指示器。==虚拟机规范中唯一没有规定OOM的区域==

虚拟机栈

本地方法栈

对应native方法,类似与虚拟机栈,只是针对的是native方法

方法区

存储类信息、静态变量、常量、即使编译器编译后的代码数据

存储对象、数组,垃圾回收也是主要作用域该区域

对象的创建

image

类加载

检查常量池中能否定位到一个类的符号引用,如果没有则执行类加载过程

分配内存

初始化

初始化为零值

设置对象头

对象的hash码,GC分代年龄等

执行init

把对象按照程序员的意愿初始化出来

对象的内存布局

对象头

实例数据

对象真正存储的有效信息

对其填充

为保证对象头为8字节的整数倍,不够用对齐填充补齐

对象的访问定位

直接访问

image

句柄访问

image

直接访问速度更快,句柄访问更加稳定

String对象相关

String s1 = "hello"; //从常量池中找hello,如果有则执行该常量,如果没有则创建一个在指向它
String s2 = new String("hello"); //若常量池中没有hello,则先在常量池中创建,然后在堆上创建

8中基本类型的包装类大部分都实现了常量池

参考

上一篇 下一篇

猜你喜欢

热点阅读