java 变量 占用空间_Java-空变量是否需要内存空间
您可以使用jol來獲取該類的布局。(但是要小心,您可能需要更深入地了解其背后的機制,不要盲目相信結果,并且要知道這只是當前使用的VM的估算值(在我的案例中為1.7.0_76 x64 win):):
我使用CLI版本,我猜正確的方法是將庫包含在您的項目中,但是無論如何,它似乎可以這樣工作:
test>java -cp target\classes;jol-cli-0.3.1-full.jar org.openjdk.jol.Main internals test.CheckStore
Running 64-bit HotSpot VM.
Using compressed oop with 0-bit shift.
Using compressed klass with 0-bit shift.
Objects are 8 bytes aligned.
Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
VM fails to invoke the default constructor, falling back to class-only introspection.
test.CheckStore object internals:
OFFSET? SIZE? ? TYPE DESCRIPTION? ? ? ? ? ? ? ? ? ? VALUE
0? ? 12? ? ? ? ?(object header)? ? ? ? ? ? ? ? N/A
12? ? ?1 boolean CheckStore.state? ? ? ? ? ? ? ?N/A
13? ? ?3? ? ? ? ?(alignment/padding gap)? ? ? ? N/A
16? ? ?4? String CheckStore.displayText? ? ? ? ?N/A
20? ? ?4? String CheckStore.meaningfulText? ? ? N/A
24? ? ?4? ? ?URL CheckStore.url? ? ? ? ? ? ? ? ?N/A
28? ? ?4? ? ? ? ?(loss due to the next object alignment)
Instance size: 32 bytes (estimated, the sample instance is not available)
Space losses: 3 bytes internal + 4 bytes external = 7 bytes total
與自動壓縮的oops相同:
test>java -XX:-UseCompressedOops -cp target\classes;jol-cli-0.3.1-full.jar org.openjdk.jol.Main internals test.CheckStore
Running 64-bit HotSpot VM.
Objects are 8 bytes aligned.
Field sizes by type: 8, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
Array element sizes: 8, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
VM fails to invoke the default constructor, falling back to class-only? introspection.
test.CheckStore object internals:
OFFSET? SIZE? ? TYPE DESCRIPTION? ? ? ? ? ? ? ? ? ? VALUE
0? ? 16? ? ? ? ?(object header)? ? ? ? ? ? ? ? N/A
16? ? ?1 boolean CheckStore.state? ? ? ? ? ? ? ?N/A
17? ? ?7? ? ? ? ?(alignment/padding gap)? ? ? ? N/A
24? ? ?8? String CheckStore.displayText? ? ? ? ?N/A
32? ? ?8? String CheckStore.meaningfulText? ? ? N/A
40? ? ?8? ? ?URL CheckStore.url? ? ? ? ? ? ? ? ?N/A
Instance size: 48 bytes (estimated, the sample instance is not available)
Space losses: 7 bytes internal + 0 bytes external = 7 bytes total
如果您的字段為null,那么這些只是對象本身的布局,那么它將不會指向更多對象,否則您還必須查看目標類型(URL和String)。(并且,如果您擁有所有這些實例的多個實例,則取決于您使用相同的多次還是不同的實例)。空字段不能在內存中跳過,因為分配實例時需要調整實例的大小。所以這些字段都是預先構造的,它們只是不引用堆上其他地方分配的對象。
注意:如果實現默認的構造函數,則會獲得更多詳細信息,但是在這種情況下的大小將是相同的。如果您想知道字段的順序和填充的來源,可以查看這篇文章 -(基本上,它將對象對齊8個字節,按大小對字段進行排序,將相同類型分組在一起,最后引用。來自超級類型的字段排在最前面, 4個字節對齊。)
總結
以上是生活随笔為你收集整理的java 变量 占用空间_Java-空变量是否需要内存空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 画布实验报告_编辑画布图像
- 下一篇: 网站提示java已被阻止_Win7系统下