Java对象的最小大小是8个字节(只有对象头),
如果在表示java对象的C++类中,
http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/src/share/vm/oops/oop.hpp
我看到这个班有更多的成员。
class oopDesc {
friend class VMStructs;
private:
volatile markOop _mark; // this is the object header
union _metadata {
wideKlassOop _klass;
narrowOop _compressed_klass;
} _metadata; // what about size of this member?发布于 2015-03-19 11:33:42
这是可能的,因为在32位JVM中,对象包含4个字节的标记头和4个字节的类引用。标记标头包含不同的信息,取决于对象类型(以位为单位的大小):
普通对象->未使用:25散列:31 cms_free:1年龄:4 biased_lock:1锁:2
偏置对象-> JavaThread*:54个时代:2 cms_free:1年龄:4 biased_lock:1锁:2
发布于 2015-03-19 11:41:12
因为头数据是二进制编码的。当通过JVMTI或本机调用访问此信息时,该二进制数据将被分解为具有更大范围的游侠的数据类型。
此外,这些大小是实现细节,取决于VM的比特性和VM使用所谓的压缩oops的事实。您可以使用分布在JOL工具中的OpenJDK读取实例的实际头。此外,您可以在源代码中找到标头编码的文档。
https://stackoverflow.com/questions/29143399
复制相似问题