gpt4 book ai didi

java - JVM上的内存分配是无锁的吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:57 28 4
gpt4 key购买 nike

当你在Java中做一个new Object()时,jvm是使用无锁算法分配内存还是需要加锁?

在这种情况下,我指的 JVM 是 Hotspot VM。据我所知,它只需要递增一个指针即可超快地分配内存。但是在多线程的情况下,这个增量是否需要加锁或者CAS?

最佳答案

如前所述,默认是使用 tlab。 this glossary 中描述了行为如下

TLAB
Thread-local allocation buffer. Used to allocate heap space quickly without synchronization. Compiled code has a "fast path" of a few instructions which tries to bump a high-water mark in the current thread's TLAB, successfully allocating an object if the bumped mark falls before a TLAB-specific limit address.

有关尺码的更多详细信息,请参见 this blog以及 this blog 中您可能需要的所有详细信息.

简而言之,它是本地线程,除非 TLAB 已满,在这种情况下您需要访问共享池,这是一个 CAS 操作。

另一个复杂因素可能是 this bug这描述了卡片标记中的错误共享,这不是锁本身,但会损害性能(如果这就是您询问锁定的原因)。看起来这在 java7 中已修复。

关于java - JVM上的内存分配是无锁的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147846/

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