1.jdk结构
1.jdk(Java Development Kit)包含Java工具,Java基础的类库和jre
jre(Java Runtime Enviromental)包含核心类库和jvm
jvm(Java Virtual Mechinal)
jdk 版本下载
2.java是跨平台的语言
image.png3.核心(jvm整体结构和内存模型)
image.png4.hotSpot虚拟机对象探秘
参考 见深入java虚拟机第二章的2.3
4.1 对象的创建
1.对象创建方式:
使用new关键字,使用Class的newInstance方法,使用Constructor类的newInstance方法,使用clone方法,
使用反序列化;
2.创建过程
虚拟机遇到new指令,首先去检查这个符号引用的的类是否被加载,解析和初始化,类加载通过后分配内存空间。
若Java堆中内存是绝对规整的,使用“指针碰撞“方式分配内存;如果不是规整的,就从空闲列表中分配,
叫做”空闲列表“方式;
划分内存时还需要考虑一个问题-并发,也有两种方式: CAS同步处理,或者本地线程分配缓冲
(Thread Local Allocation Buffer, TLAB)。
然后内存空间初始化操作,接着是做一些必要的对象设置(元信息、哈希码…),最后执行<init>方法
4.2 对象内存布局
大致分成三块区域:对象头 实例数据 和对齐填充
1.对象头
第一部分,Mark word,用于存储对象自身运行时的数据,
如哈希码,gc分代年龄,锁状态标志,线程持有锁,偏向线程id,偏向时间戳
另一部分类型指针,即对象指向它的类元数据的指针,(用于确定对象类型)
2.实例数据
3.对齐填充
对象字节是否能被8整除,否则自动填充到能被8整除
4.3 对象访问定位
指程序需要通过JVM上栈的引用访问堆中的具体对象;
主要使用句柄池和直接指针;
Java
堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地址,而句柄中包含了对象实例数据与对象类型数据各自的具体地址信息,具体构造如下图所示
访问定位-直接指针.jpg
网友评论