云时代的 JVM 原理与实战
康杨
京东资深架构师
3111 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
云时代的 JVM 原理与实战
15
15
1.0x
00:00/00:00
登录|注册

12|对象创建全家桶:JVM中对象创建的模式及最佳实践

你好,我是康杨。
今天我们一起站在对象创建的视角,看看 JVM 为我们提供了哪些能力,还有怎么更好的应用这些能力。我们也会聊一下,创建对象需要考虑的因素以及对象创建对对象回收的影响。
首先我们从一个实际的场景开始,假设你是某一个在线阅读网站的程序员,老板安排了一个任务,需要统计在线图书被阅读的次数。你决定采用面向对象的思想来设计,所以第一步你先设计了一个 Book 对象,它有四个属性,分别是这本书的编号、书名、图书的简介以及这本书被阅读的次数。
public class Book {
private Long no; // 图书的编号
private String name =default Name ”; //书名
private String desc; //图书的简介
private Long readedCnt; // 这本书被读的次数
public Book() {
}
public Book(Long no, String name, String desc, Long readedCnt) {
this.no = no;
this.name = name;
this.desc = desc;
this.readedCnt = readedCnt;
}
public Long getNo() {
return no;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
public Long getReadedCnt() {
return readedCnt;
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了JVM中对象创建的模式及最佳实践。通过实际场景引出对象创建的需求,以Book对象为例,详细介绍了对象创建的字节码和对象在JVM中存在的形态。文章还探讨了对象在内存中的大小以及栈上分配的优化方式,包括TLAB的使用。此外,文章还介绍了通过反射创建对象的方式,并提到了创建型设计模式。通过对JVM对象创建的全面讲解,读者可以深入了解对象创建的底层原理和最佳实践,为他们在实际开发中的对象创建提供了有益的指导。文章还介绍了建造者模式,用于构建复杂对象,降低系统的实现和维护成本。总的来说,本文通过实际案例和技术原理,为读者提供了深入了解JVM对象创建的机制和最佳实践的机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云时代的 JVM 原理与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • TableBear
    请教老师一个问题,开启或者关闭对象指针压缩,对象指针和Class指针是不是应该同步开启或关闭压缩。文中举的例子压缩指针的时候是12字节头部+16字节实例数据。未压缩指针的是不是应该16字节头部+32字节实例数据?
    2023-10-29归属地:广东
    1
    1
  • C.
    优化点: 1、静态工厂方法,通过静态方法返回对象实例,相比于直接调用构造函数,静态工厂方法可以提供更多的灵活性和优化空间。(例:静态工厂方法中使用对象池或缓存来重用对象,避免重复创建) 2、使用对象池或缓存:对于频繁创建和销毁的对象,可以考虑使用对象池或缓存来重用对象,避免重复创建和垃圾回收的开销。(Apache Commons Pool) 3、使用不可变对象,不可变对象是指其状态在创建后不可更改的对象,可以避免线程安全性问题和复制对象的开销。 4、懒初始化,推迟对象初始化的时机,使用的时候初始化。 解耦: 1、工厂模式 2、依赖注入
    2023-09-19归属地:江苏
    1
  • sc
    讲的真清晰
    2023-09-18归属地:浙江
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部