JVM对象创建与内存分配机制分析
前言
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
一、对象的创建
- 主要流程:
- 类加载:
JVM执行new指令时,会检查这个类是否已经被加载过了,如果有,则直接返回该对象;
如果没有,那就执行相应的类加载过程。
二、分配内存
-
JVM虚拟机给新生对象分配内存,等同于把一块确定大小的内存从堆中划分出来。
1)内存划分
因为存在内存碎片,JVM会维护一个列表,来记录哪些内存是可用的,在分配的时候从列表中找到一块足够大的空间分配给对象实例,并更新列表上的记录。
2)本地线程分配缓冲
在并发情况下,可能出现正在给对象A分配内存,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的问题:
解决并发问题的方法:CAS(compare and swap)
虚拟机采用CAS配上失败重试的方式保证更新操作的原子性来对分配内存空间的动作进行同步处理。
三、初始化
- 内存分配完成后,虚拟机需要将分配到的内存空间都初