美文网首页
JVM中对象创建的模式及最佳实践

JVM中对象创建的模式及最佳实践

作者: 自天佑之吉无不利 | 来源:发表于2023-09-18 21:11 被阅读0次

对象在 JVM 中存在的形态

Book 对象在 JVM 运行时中的状态是怎样的呢?


image.png

Book 类对象存储在 JVM 里,总共由 3 个部分组成,分别是对象头、实例数据和对齐填充。


image.png

对象头部分

通常情况下对象头包含两部分,一部分是 mark word,默认为 8 字节,另一部分是类元数据指针 Klass Pointer,4 字节或 8 字节,这取决于 JVM 启动参数 UseCompressedOops 的设置,我们下面假设起始值为 4 字节,所以对象头部的大小默认是 12 字节。

实例数据部分

Book 类有四个字段,分别为 Long 型的 no、String 型的 name、String 型的 desc 以及 Long 型的 readedCnt。因为这四个字段的类型都是引用类型,占用的内存取决于平台,64 位 JVM 下默认开启压缩指针压缩 Oops 的占 4 字节,未开启则占 8 字节。所以实例数据部分的大小是 16 字节或 32 字节。

对齐填充部分

由于 JVM 自动内存管理系统要求对象起始地址必须是 8 字节的整数倍,也就是说一个对象的总大小必须是 8 的倍数,所以可能存在对齐填充。在已经开启压缩 Oops 的情况下,对象头部占 12 字节,实例数据占 16 字节,共 28 字节。由于必须是 8 字节的整数倍,所以需要填充 4 个字节,变成 32 字节。而在未开启压缩 Oops 的情况下,对象头部 12 字节,实例数据 32 字节,一共 44 字节,需要填充 4 字节,变成 48 字节。因此,Book 类的对象在 JVM 里占用的大小是 32 字节或者 48 字节。

对象的大小是我们平时很容易忽视的内容,但你设想一下百万级 TPS 的系统,如果每秒都需要创建百万级的 Book 大小,那么仅仅一个指针压缩都能给我们带来巨大的收益,不仅可以降低成本、提升性能,还能有效避免 FULL GC,也许这就是我们需要了解 JVM 底层实现的意义。

创建型设计模式

建造者模式

Book 类有四个属性,它的构造函数的参数也是四个,如果 Book 类有更多的参数呢,如果有的参数是必填,有些是选填,构造函数应该如何设计呢?当参数超过 10 个或者更多的时候,按照之前的方式,显然构建的难度会越来越大,可维护性越来越差,参数传错以及排错的难度也会同步增加。好在业界的前辈们已经为我们想好了解决方案,针对这种复杂对象的构建我们可以使用建造者模式。

建造者模式(Builder Pattern)又名生成器模式,它是一种对象构建模式,用于将复杂对象的建造过程抽象出来, 使这个抽象过程的不同实现方法可以构造出不同属性的对象。

此文章为9月Day18学习笔记,内容来源于极客时间《云时代JVM实战 》,强烈推荐该课程

相关文章

  • PHP完整实战23种设计模式

    前言设计模式是面向对象的最佳实践实战PHP实战创建型模式创建型 Factory Method(工厂方法)-工厂模式...

  • 创建型模式-创建者模式

    创建者模式是为了创建复杂对象而存在的最佳实践模式.突然想到工作中,使用的新建创意这个功能,感觉可以用创建者模式去组...

  • 工厂模式(Factory Pattern)

    模式定义 工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,创建对象时不会对外暴露创建逻辑,...

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • Java中的工厂模式

    工厂模式简介 模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,创建对象时不会对客户端暴露创建逻...

  • 设计模式 (二) 工厂模式

    工厂模式:属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,...

  • 设计模式·工厂模式

    1.工厂模式定义 工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户...

  • Factory Method(工厂模式)

    工厂模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客...

  • C++工厂模式

    什么是工厂模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不...

  • 模式设计之 原型模式

    定义 原型模式:原型模式用于创建重复的对象,实现对象的拷贝。这种模式类似于创建型模式,提供了创建对象的最佳模式。 ...

网友评论

      本文标题:JVM中对象创建的模式及最佳实践

      本文链接:https://www.haomeiwen.com/subject/ebagvdtx.html