如何在 JVM 中实现压缩的 ooP?
How is a compressed ooP implemented in JVM?
快速 google 搜索结果令人惊讶地一无所获。
我的问题如下:
对于 32 位架构 - 2^32 字节将是内存 space = 4GB
因此对于 4 GB 的 Java 堆,我们需要一个大小为 32 位 = 4 字节的指针。
但是,通过压缩 oop 的概念,JVM 仍然可以使用 4 字节指针,最大堆大小为 32 GB。
仔细想想,32GB = 4GB * 2^3。
这意味着我们实际上还需要 3 位,但不知何故,这些位在 storage/access.
期间被 JVM 获取 encoded/decoded
我发现这些页面无法访问:http://wikis.sun.com/display/HotSpotInternals/CompressedOops
https://wikis.oracle.com/display/HotSpotInternals/CompressedOops
有人可以向我解释一下幕后发生的魔法吗?
致 Mods:我发现了一个现有问题,但它指向 https://wikis.oracle.com/display/HotSpotInternals/CompressedOops。这个 wiki 已经不存在了,你能不能允许这个问题这么久,以便有人给我指出另一个深入的 link。请。
编辑:
@Markus Mikkolainen 的回应是我找到的最简单易懂的解释:
它们是偏移量,它们用于索引 8 字节块而不是 1 字节块,因为对象是 8 字节对齐的。
这是否回答了您的问题,它们是偏移量并且它们用于索引 8 字节块而不是 1 字节块,因为对象是 8 字节对齐的。
快速 google 搜索结果令人惊讶地一无所获。
我的问题如下:
对于 32 位架构 - 2^32 字节将是内存 space = 4GB 因此对于 4 GB 的 Java 堆,我们需要一个大小为 32 位 = 4 字节的指针。
但是,通过压缩 oop 的概念,JVM 仍然可以使用 4 字节指针,最大堆大小为 32 GB。
仔细想想,32GB = 4GB * 2^3。 这意味着我们实际上还需要 3 位,但不知何故,这些位在 storage/access.
期间被 JVM 获取 encoded/decoded我发现这些页面无法访问:http://wikis.sun.com/display/HotSpotInternals/CompressedOops https://wikis.oracle.com/display/HotSpotInternals/CompressedOops
有人可以向我解释一下幕后发生的魔法吗?
致 Mods:我发现了一个现有问题,但它指向 https://wikis.oracle.com/display/HotSpotInternals/CompressedOops。这个 wiki 已经不存在了,你能不能允许这个问题这么久,以便有人给我指出另一个深入的 link。请。
编辑:
@Markus Mikkolainen 的回应是我找到的最简单易懂的解释: 它们是偏移量,它们用于索引 8 字节块而不是 1 字节块,因为对象是 8 字节对齐的。
这是否回答了您的问题,它们是偏移量并且它们用于索引 8 字节块而不是 1 字节块,因为对象是 8 字节对齐的。