求助>OopMap 是啥?>
2回复

OopMap 是啥?



深入理解Java虚拟机的书里提起过这个,不过讲的不细。有没有大神详细介绍下

586 阅读
请先登录,再评论

这个通俗的来说,就是因为虚拟机无法分辨内存里某个位置上的数据到底是引用类型的oop还是int之类的立即数。举个栗子:你在根扫描扫描栈的时候,你不知道栈内存上存的这个数字(如0x11111111)到底是个指向堆内存里对象的指针oop还是这是个int之类的类型,此时最笨的办法就是把他当成一个oop指针去堆内存位置找,如果找不到则说明他不是oop类型,但是如果巧了,正好能找到这个位置,如果正好有个数和地址值相同那么虚拟机就会出现误判。而且这种方式只能挨个所有的栈 ,效率很差。所以hotspot就用一个全局的数据结构来标记栈里面的数是立即数还是指针地址,这个全局的数据结构就叫oopmap,具体实现的话,其实每个instanceklass都有一个oopmapblock。

1月前
回复 大佬们的小马甲:

要谢谢@豆大侠的分享,非常清晰👍

1月前回复