书籍,猿类进步的阶梯!!!
《深入理解java虚拟机》---周志明
java内存区域与内存溢出异常
JVM运行时数据区

Hotspot虚拟机在java堆中对象分配、布局、访问
1.对象的创建

堆内存划分可用空间
jvm垃圾收集器是否带有压缩整理功能---决定--->堆内存是否规整
堆内存是否规整---决定--->堆内存分配方式
堆内存规整:指针碰撞算法
例如:垃圾收集器带有压缩整理功能---->Serial、ParNew带Compact过程的收集器;
堆内存不规整:空闲列表 例如:垃圾收集器带有压缩整理功能---->CMS基于Mark-Sweep算法的收集器;
并发情况,对象在JVM中创建
问题:多个对象同时分配空间,指针修改指向
解决方案:
- 对分配内存空间的动作进行同步处理
虚拟机保证更新操作的原子性:采用CAS+失败重试的方式 - 内存分配的动作按线程划分在不同的空间中进行
本地线程分配缓存(Thread Local Allocation Buffer):每个线程预先在堆中分配一小块内存
2.对象的内存布局

3.对象的访问定位
创建对象---目的--->使用对象
java程序操作对象:通过栈上的reference数据
虚拟机具体实现---决定--->对象访问方式
目前主流对象访问方式
- 使用句柄

- 直接指针
优点:速度更快,节省了一次指针定位的时间开销
注:以上皆个人理解,如有错误,请大佬赐教,在此谢过