gpt4 book ai didi

memory-management - 分配后TLAB分配的对象是否共享?

转载 作者:行者123 更新时间:2023-12-02 00:05:58 25 4
gpt4 key购买 nike

JVM Eden 空间中的 TLAB 设计让我有点困惑。我的问题是,如果对象是由 TLAB 中的一个线程分配的,那么之后如何与其他线程共享?一个线程独占的TLAB区是重新组装,还是对象被移出?

最佳答案

一个 TLAB 专门为一个线程进行的分配保留。它仍然是所有线程共享地址空间中的内存。换句话说,它可以被所有线程访问

当然,如果将对象的引用存储到共享变量中,则对象只能由其他线程访问。由于在正常工作的 JVM 中,其他线程只能通过遍历这样的引用来访问内存,这意味着其他线程只能访问所有者已经为对象分配的 TLAB 的内存,并且至少进行了最小初始化在引用变得可观察之前,由 JMM 保证的工作已由所有者线程完成。

这种内在的正确性意味着其他线程不需要看到 TLAB 的实际分配状态,因此维护信息可以是真正的线程本地的,例如保存在 CPU 寄存器中。

无论一个对象是否被多个线程共享,如果它在下一次垃圾收集之前仍然存在(如果正在使用复制收集器),它只会从其初始分配中移走。但是当发生这种情况时,对象分配到的内存不再是 TLAB,因为使该内存成为 TLAB 的是它的使用方式。

在以前用作 TLAB 的内存区域被垃圾收集器清空后,它也可能作为新的 TLAB 重新分配给不同的线程(或用于不同的目的)。

关于memory-management - 分配后TLAB分配的对象是否共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60629966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com