对象实例化与访问---JVM(十)
发布日期:2021-05-10 06:29:24 浏览次数:18 分类:精选文章

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

对象的创建方式

在编程中,对象的创建是开发工作中的基本操作之一。以下是几种常见对象创建的方式以及它们的特点和适用场景。

  • 使用 new 关键字

    这是最常用的对象创建方式。通过 new 关键字 调用类的构造器,来初始化对象。具体来说,就是通过 new Class() 的形式来创建对象。这种方式简单直观,是大多数开发者最熟悉的方式。

  • 使用反射机制

    反射可以通过 Class.newInstance() 或者 Constructor.newInstance() 来创建对象。需要注意的是,反射创建对象时,必须使用空参数的构造器,并且构造器必须是公有权限。如果构造器是私有的或有参数的,则无法通过反射创建对象。但反射机制可以绕过一些语言层面的限制,有时在特定场景下非常有用。

  • 使用 Cloneable 接口的 clone() 方法

    这种方式适用于对称对象克隆。即使对象比较大,使用 clone() 创建拷贝也不需要调用构造器。这种方式节省了内存,但需要确保类实现了 Cloneable 接口,并且 clone() 方法本身是公有的。

  • 使用反序列化

    反序列化是从二进制流中恢复对象的方式。可以从文件中加载对象,或者从网络上下载二进制流,再通过反序列化方法恢复对象。这种方式在某些特定的场景下非常有用,比如需要从持久化存储中读取对象时。

  • 使用第三方库 Objenesis

    Objenesis 是一个强大且灵活的反射工具,能够以更灵活的方式创建对象。支持调用有参数的构造器,甚至可以绕过某些字段的访问控制(如私有字段或方法),对开发者非常有帮助。

  • 对象的创建步骤

    对象的创建过程在虚拟机内部涉及许多复杂的步骤。以下是具体步骤的描述。

  • 类加载

    当虚拟机执行 new 关键字时,首先会检查目标类是否已经被加载。如果尚未加载,类加载器会根据需要加载类。类加载包括了验证、准备、解析和初始化等阶段。

  • 内存分配

    为新对象分配内存。虚拟机会根据需要使用不同的内存分配策略。目前主流的有两种方式:规整分配(用指针碰撞)和空闲列表分配。规整分配性能更好,而空闲列表分配则提供了更好的空间局当itudity兼容性。

  • 对象初始化

    初始化对象所占空间中的内容。对于引用 член变量,虚拟机只需要分配引用变量的空间(通常是4字节)。对象头中将存储类的元数据、哈希码、GC标记信息以及锁信息等。

  • 执行构造器

    调用类的定制构造器来初始化对象。如果没有显式调用 new 关键字,或者是通过反射方式创建对象,则需要确保构造器是可访问的。

  • 设置对象头

    在对象头中存储元数据、哈希码、GC标记信息,以及锁信息等。这些信息对于垃圾收集和同步操作至关重要。

  • 完成对象创建

    只有在以上所有步骤顺利完成后,才能称得上一个对象被完整创建。

  • 对象的结构

    一个典型的对象在内存中的结构如下:

  • 对象头

    包含元数据(如类信息、哈希码)、垃圾收集标记等。

  • 实例数据部分

    根据对象的需求,包含成员变量和方法零值。对于大对象,通常存储在堆中;对于小对象,可能直接存放在方法区中。

  • 其他资源

    包括同步锁、finalizer 等必要的支持结构。

  • 在实际应用中,虚拟机会根据垃圾收集器的选择(如标记-清除、复制、标记-整理)采用不同的内存分配策略。

    对象访问的方式

    在程序中访问对象可以使用两种方式:句柄访问和直接引用。

  • 句柄访问

    采用引用(Reference)来间接访问对象。句柄操作非常高效,因为只需修改句柄中的指针不需要修改整个引用。这种方式也是垃圾回收所常用的方式。

  • 直接引用

    使用对象本身作为引用。这在方法参数中非常常见,因为它简单直观。但是问题在于,当对象被移动(GC进行回收)时,所有引用都会被更新吗?其实不是,只有强引用才不会被回收。如果是弱引用或柔性引用,则可能被回收,但不会阻止对象的垃圾回收。

  • 使用 Hotspon 及其它高级机制

    当应用程序需要频繁地访问对象时,可以采用 Hotspon( 热链)机制来缓解性能问题。通过缓存对象的访问路径,减少频繁的对象访问开销。

  • 上一篇:执行引擎---JVM(十一)
    下一篇:方法区---JVM(九)

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月29日 23时20分38秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章