[讨论] R大,能抽时间讲解一下instanceKlass,vtable和itable的故事吗?谢谢了
lucky_huhu
2014-01-21
从往事搜索了这方面的一些信息,有说使用inlince caching,有说使用method table,有说使用vtable和itable,越查越头大。R大能抽时间讲解一下instanceKlass,vtable和itable的故事吗?谢谢了
|
|
RednaxelaFX
2014-01-23
http://rednaxelafx.iteye.com/blog/730461#comments
呃呵呵被催债了⋯ 其实以前写过好几篇相关的,最后都坑在草稿箱里了。不如楼主先说你知道什么,我们在讨论的过程中码字,这样就没那么大鸭梨。 另外建议楼主先读下面几篇文档,然后就没读懂的地方发问,这样方便具体回答: Virtual method table 关于vtable的基本背景知识。 可惜wiki上没有itable(interface dispatch table)的词条。 VM Types used to map Smalltalk objects into C++ objects 这篇讲了Strongtalk VM(HotSpot VM的前身)中oop与klass的关系。这在HotSpot VM里也有所体现。 http://openjdk.java.net/groups/hotspot/docs/RuntimeOverview.html 这篇的Class Metadata in HotSpot小节讲到了instanceKlass。 https://wiki.openjdk.java.net/display/HotSpot/VirtualCalls 这篇讲了invokevirtual与vtable dispatch,以及在monomorphic情况下的monomorphic inline cache(VEP与UEP那里) (John Rose在写这篇文档的时候把VEP和UEP正好全部写反了。我以为我已经修正过wiki上的写法了但为啥现在还是反的orz⋯楼主读的时候留意一下,UEP是带有_klass检查的入口,VEP在UEP的检查之后,是不带检查的入口。) https://wiki.openjdk.java.net/display/HotSpot/InterfaceCalls 这篇讲了invokeinterface与itable dispatch。留意monomorphic的时候跟invokevirtual一样用monomorphic inline cache。 https://wiki.openjdk.java.net/display/HotSpot/Overview+of+CompiledIC+and+CompiledStaticCall 这篇讲了inline caching 然后还有Cliff Click大神写的博客: Inline Caches and Call Site Optimization 前人写过这么多这么详细的资料了我感觉再写东西的动力不太足 |
|
lucky_huhu
2014-01-23
非常感谢R大耐心细致的回答。
|