我看到其中之一被描述爲「實例類是Java類的VM級表示。」另一個是「一個klassOop是一個Java類的C++等價物」,那麼它們之間的區別是什麼?爲什麼我們需要他們兩個,我們可以結合二對一嗎? http://hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/share/vm/oops/instanceKlass.hpp http://hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/share/vm/oops/klassOop.hppklassoop和instanceklass真的有什麼區別?
0
A
回答
1
這將是更準確的比較klassOop
與Klass
,因爲instanceKlass
是Klass
特定的後裔。
在JDK 7類中,元數據存儲在永久生成的Java堆中。像Java中的所有對象堆類元數據都有一個對象頭。 klassOop
基本上是一個包裝器,將C++ Klass
對象封裝到Java Heap對象(也稱爲OOP)中。
_________________
| |
| mark_word | <-- OOP header
| klass_field |
| _______________ |
|| ||
|| C++ vtbl ptr || <-- InstanceKlass data
|| subtype cache ||
|| instance size ||
|| java mirror ||
|| super ||
|| access_flags ||
|| name ||
|| ... ||
||_______________||
|_________________|
由於JDK 8沒有更多的永久代,並且沒有更多的klassOop
實體。所有的類元數據都作爲普通的C++對象存儲在Metaspace中。
如果你想學習HotSpot JVM內部構件,我建議你考慮一下jdk8u
版本庫。
相關問題
- 1. 仿真和模擬有什麼區別?
- 2. 真實設備和模擬器/仿真器有什麼區別?
- 3. 有什麼區別`和$(Bash中有什麼區別?
- 4. 有什麼區別? :和||
- 5. &&和||有什麼區別?
- 6. 「/」和「/ *」有什麼區別?
- 7. 有什麼區別:。!和:r!?
- 8. ==和===有什麼區別?
- 9. Appender和〜有什麼區別?
- 10. $ @和$ *有什麼區別?
- 11. is和=有什麼區別?
- 12. #.00和#。##有什麼區別?
- 13. `==`和`is`有什麼區別?
- 14. '=='和'==='有什麼區別?
- 15. /和/#/有什麼區別?
- 16. | 0和~~有什麼區別?
- 17. `&`和`ref`有什麼區別?
- 18. ==和===有什麼區別?
- 19. ==和===有什麼區別?
- 20. `{}`和`[]`有什麼區別?
- 21. JavaScript和=== ===有什麼區別?
- 22. difftime和' - '有什麼區別?
- 23. =和==有什麼區別?
- 24. window.prompt和prompt之間有什麼真正的區別?
- 25. xtype和別名有什麼區別?
- 26. Mixpanel:識別()和people.identify()有什麼區別?
- 27. PHP真和'真'區別
- 28. 有什麼區別
- 29. 有什麼區別
- 30. 有什麼區別?
謝謝你apangin。 –