博客
关于我
深入理解Java虚拟机——对象的实例化内存布局与访问定位——超级详细篇——第四章
阅读量:326 次
发布时间:2019-03-04

本文共 1257 字,大约阅读时间需要 4 分钟。

对象的实例化与内存布局

在Java虚拟机中,对象的创建、内存布局以及访问方式是理解Java内存管理的核心内容。了解这些机制有助于我们更好地理解Java程序的运行环境。

对象的实例化

对象的实例化可以从Java字节码的执行步骤来分析。例如,以下代码段:

public class ObjectTest {    public static void main(String[] args) {        Object obj = new Object();    }}

在执行时,虚拟机会经历以下几个步骤:

  • 类加载:首先,Object类必须被加载到虚拟机中。如果类已经被加载,则会直接使用已有的类信息;如果没有,则需要进行类验证、准备和解析。

  • 内存分配:为新创建的对象分配内存。这一步可能会使用指针碰撞或空闲列表等方法,具体取决于垃圾回收器的实现和内存是否规整。

  • 初始化:分配完成后,虚拟机会将内存中的内容初始化为0。对于大多数对象,这一步可以通过本地线程分配缓冲(TLAB)来优化,减少内存碎片。

  • 设置对象头:对象头是存储对象运行时数据的区域。它包括Mark Word(用于存储哈希码、分代年龄、锁状态等信息)和类型指针(指向类的元数据)。对于数组对象,类型指针还会存储数组的长度。

  • 初始化方法:调用Objectinit方法进行初始化操作。

  • 这些步骤共同完成了对象的实例化过程。

    对象的内存布局

    在内存中,一个对象的布局可以分为三个部分:

  • 对象头(Header):包含Mark Word和类型指针。Mark Word的长度根据虚拟机实现(32位或64位)而定,用于存储对象的哈希码、分代年龄、锁状态等信息。类型指针指向类的元数据,帮助虚拟机定位对象的类型信息。

  • 实例数据(Instance Data):存储程序中定义的字段信息。字段的存储顺序和分配策略受到虚拟机的控制,例如CompactFields参数设置为true时,会尽量紧凑字段布局。

  • 对齐填充(Padding):由于Java要求对象的起始地址必须是8字节的整数倍,实例数据部分可能需要通过对齐填充来补充空缺的字节。

  • 这种内存布局设计既保证了内存的高效利用,也为垃圾回收和对象访问提供了便利。

    对象的访问定位

    在Java中,对象是通过栈上的引用(reference)来操作的。引用可以是直接指针或句柄。以下是两种访问方式的对比:

  • 使用句柄:句柄访问需要预先分配一块内存作为句柄池。句柄中存储了对象的实例数据和类型数据,引用只需存储句柄地址即可。

  • 使用直接指针:直接指针访问方式中,引用直接存储对象在堆中的地址。这种方式访问速度更快,但需要确保内存布局支持直接定位。

  • 选择哪种方式取决于具体的性能需求。句柄访问更稳定,适合频繁移动对象的情况;直接指针访问速度更快,适合对性能要求较高的场景。

    通过理解对象的实例化、内存布局和访问定位,我们可以更深入地理解Java虚拟机的内存管理机制。这些知识对于优化Java程序性能、理解垃圾回收算法等都是非常重要的。

    转载地址:http://brqq.baihongyu.com/

    你可能感兴趣的文章
    power english (3) main text -emotion mastery - focus
    查看>>
    POWER ENGLISH (6) - MODEL
    查看>>
    power english (1) —— passion
    查看>>
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>
    POWER ENGLISH(7)- repetition
    查看>>
    SpringBoot中集成SpringBatch详细解析与实战示例(CSV文件读取十万条数据进行业务处理后写入Mysql数据库)
    查看>>
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>