[讨论] 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大耐心细致的回答。
Global site tag (gtag.js) - Google Analytics