0
点赞
收藏
分享

微信扫一扫

深入学习JVM03 类与对象 下篇

11 对象创建

深入学习JVM03  类与对象 下篇_JVM

类加载

深入学习JVM03  类与对象 下篇_对象创建_02

空间分配

深入学习JVM03  类与对象 下篇_JVM_03

指针碰撞

深入学习JVM03  类与对象 下篇_JVM_04

空闲列表

深入学习JVM03  类与对象 下篇_内存分配_05

TLAB 线程本地缓冲区

TLAB 是 Thread Local Allocation Buffer 的缩写,也称为线程本地分配缓冲区。我们以垃圾回收器采用 CMS 为例,这种情况下,所有的对象都是在新生代 Eden 区分配的。因为 Eden 区也是全局共享的,当同一时间有多个线程同时向 Eden 区申请空间分配的时候,就必然会引发同步问题,从而导致内存分配效率降低。

为此 JVM 引入了 TLAB 机制,也就是以线程为单位,为每个线程分配一块区域以减少同步竞争,从而提升对象分配的效率

当然即使使用了 TLAB,也不会无限地给一个线程分配空间,因为在实际的生产环境中堆空间是非常宝贵的资源,所以 TLAB 分配的空间一般不会很大。我们可以通过 -XX:TLABWasteTargetPercent 来设置 TLAB 占用的空间大小。因为 TLAB 空间是有限的,所以很可能会出现分配的对象大小超过 TLAB 空间的情况。这种情况下有两种解决方案,第一种就是绕过 TLAB,直接在堆上分配,第二种就是废弃掉当前的 TLAB,创建一个新的 TLAB 来满足新分配的对象的空间要求。

深入学习JVM03  类与对象 下篇_内存分配_06

对象创建两段论

深入学习JVM03  类与对象 下篇_对象创建_07

对象创建快捷流水线

深入学习JVM03  类与对象 下篇_JVM_08

这条全新的流水线主要由四个节点构成

深入学习JVM03  类与对象 下篇_JVM_09

深入学习JVM03  类与对象 下篇_JVM_10

深入学习JVM03  类与对象 下篇_对象创建_11

深入学习JVM03  类与对象 下篇_JVM_12

深入学习JVM03  类与对象 下篇_JVM_13

深入学习JVM03  类与对象 下篇_对象创建_14

深入学习JVM03  类与对象 下篇_JVM_15

深入学习JVM03  类与对象 下篇_内存分配_16

深入学习JVM03  类与对象 下篇_对象创建_17

12 JVM对象创建模式和最佳实践

JVM创建对象流程

深入学习JVM03  类与对象 下篇_JVM_18

深入学习JVM03  类与对象 下篇_对象创建_19

深入学习JVM03  类与对象 下篇_JVM_20

对象在 JVM 中存在的形态

深入学习JVM03  类与对象 下篇_JVM_21

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

深入学习JVM03  类与对象 下篇_对象创建_22

深入学习JVM03  类与对象 下篇_JVM_23

深入学习JVM03  类与对象 下篇_JVM_24

深入学习JVM03  类与对象 下篇_对象创建_25

我们可以用 -XX:+UseTLAB 来启用 TLAB,它在 JDK8 中是默认开启的。开启 TLAB 后,每个线程在创建对象时都会在自己的 TLAB 中进行,从而避免了不同线程间的内存分配竞争,提升了系统性能。反之,如果我们没有开启 TLAB,那么这 10 个线程都将在共有的 Eden 区进行内存分配,会存在较大的竞争和同步开销,系统性能将大大降低。

深入学习JVM03  类与对象 下篇_对象创建_26

13 对象回收(上):定位待回收的对象

什么是 GC

GC 是 Garbage Collection 的缩写,中文叫做垃圾回收。它是一种自动化的内存管理机制,能够识别和回收不再使用的内存空间。在 Java 里,JVM 负责 GC。通过这种方式,Java 程序员无需手动进行内存的分配和回收,从而降低了内存泄漏的风险,提高了开发效率。

GC 的主要目标

深入学习JVM03  类与对象 下篇_对象创建_27

GC 的主要步骤

深入学习JVM03  类与对象 下篇_JVM_28

深入学习JVM03  类与对象 下篇_对象创建_29

深入学习JVM03  类与对象 下篇_JVM_30

深入学习JVM03  类与对象 下篇_对象创建_31

举报

相关推荐

0 条评论