理解 JVM 工作机制(二) 对象的创建
对象的创建
对象创建的流程
普通对象的创建时,JVM 接收到 new 指令,会先去常量池检查是否有符号引用,如果有会检查类是否加载、解析和初始化过。如果没有就会先执行类的加载。
假设在分配对象内存的时候,内存的大小是确定的。那就会在堆中划分出来。
对象分配方式
指针碰撞
假设堆中的内存像理想状态
下一样,空闲内存和使用中的内存是各自一边的,中间使用的是一个指针分界点来区分。那么分配内存就是仅仅把指针汪空闲内存移动了和对象大小相等的距离。
空闲列表
如果堆中的内存不是规整的而是相互交错的呢?
Java 通过在虚拟机中维护了一个列表,里面记录了哪些内存块是可用的,在分配内存大小的时候就从列表中找到一块足够大的空间划分给对象实例。
决定Java堆是否规整是由所采用的垃圾回收器是否带有空间压缩整理(Compact)的能力决定的。
多线程的情况下,JVM采用了CAS的形式和TLAB的方式处理对象的分配
版权声明: 本文为 InfoQ 作者【ue4】的原创文章。
原文链接:【http://xie.infoq.cn/article/a8aee3cd2679f42100ff667d2】。文章转载请联系作者。
评论