看到书里有这么一段话:一个Integer对象会使用24字节,其中分别是:
16字节的对象开销
4字节用于保存它的int值
4个填充字节
我想请教的是:
什么对象开销?16字节里面究竟存储着什么?
填充字节又是什么?它里面存储着什么?
认证高级PHP讲师
16 バイトは Object Header であり、Mark word、Class 型情報を含みます... (16 バイトは 64 ビット システムでのサイズであり、ポインター圧縮は有効ではありません)
Object Header
Mark word
Class
HotSpot のアライメントは 8 バイト アライメントです。最終サイズが 8 バイトの倍数でないすべてのオブジェクトは埋められます。
オブジェクトのオーバーヘッドにはオブジェクトの基本情報が含まれており、パディングバイトはバイト数を埋めるために使用されます。オブジェクトが占めるバイトは 8 バイトの倍数である必要があります。
以下は単なる無責任な推測です: Integer を構築する場合、最初に Object を構築する必要があります。このときの 8 バイトは空のオブジェクトと 4 つのワードです。セクションはオブジェクト参照ですが、Java のバイト割り当ては 8 単位なので、ここでは 16 バイトが使用され、無駄なバイトはパディングバイトと呼ばれます。 以下のパディングバイトは同じです。
16 バイトは
Object Header
であり、Mark word
、Class
型情報を含みます... (16 バイトは 64 ビット システムでのサイズであり、ポインター圧縮は有効ではありません)HotSpot のアライメントは 8 バイト アライメントです。最終サイズが 8 バイトの倍数でないすべてのオブジェクトは埋められます。
オブジェクトのオーバーヘッドにはオブジェクトの基本情報が含まれており、パディングバイトはバイト数を埋めるために使用されます。オブジェクトが占めるバイトは 8 バイトの倍数である必要があります。
以下は単なる無責任な推測です:
Integer を構築する場合、最初に Object を構築する必要があります。このときの 8 バイトは空のオブジェクトと 4 つのワードです。セクションはオブジェクト参照ですが、Java のバイト割り当ては 8 単位なので、ここでは 16 バイトが使用され、無駄なバイトはパディングバイトと呼ばれます。
以下のパディングバイトは同じです。