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