gpt4 book ai didi

java - Java 数组在 HotSpot 中使用内存的精确程度如何(即多少 slop)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:25 25 4
gpt4 key购买 nike

C malloc 实现通常不会分配请求的精确内存量,而是消耗固定大小的内存运行,例如具有二次方大小,因此 1025 字节的分配实际上占用了 2048 字节的段,其中 1023 字节作为 slop 丢失。

HotSpot 是否对 Java 数组使用类似的分配机制?如果是这样,分配 Java 数组的正确方法是什么,这样就没有溢出? (例如,数组长度应该是 2 的幂还是 2 的幂减去一些固定的开销?)

最佳答案

如果您问的是语言,答案是:未指定(与 C 相同)

如果您询问的是具体实现,请查看该实现。我相信 Hotspot 的粒度是 8 字节;即对象大小向上舍入到下一个粒度边界。如果问题是关于在没有足够的可用堆时增加堆大小,那么它取决于实现、GC 设置、堆大小参数等;使得准确回答变得不切实际。

编辑:使用一个小的反射 hack,访问 sun.misc.Unsafe 类(仅限 Oracle JRE),对象引用可以转换为内存地址;输出两个连续分配的数组的地址自己检查。

我基本上在这里问了同样的问题:Determine the optimal size for array with respect to the JVM's memory granularity (答案包括使用 Unsafe 类检查对象大小的示例)

关于java - Java 数组在 HotSpot 中使用内存的精确程度如何(即多少 slop)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786397/

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