Java堆栈溢出的机制与原理

Java堆栈溢出的机制与原理,第1张

在hotspot/src/share/vm/runtime/globalshpp以及各组件、平台相关的_gloabalshpp有这些VM参数的声明,然后在对应的cpp文件里有它们的实现。

在product build中,被宏展开之后实际上会变成:

在JavaMain()函数中会创建虚机:

创建虚拟机的函数中,首先会进行虚拟机参数解析并设置好相应的全局变量的值,例如UseParallelGC。然后在init_globals()中就会根据UseParallelGC在创建堆设置好GC回收策略。

parse_each_vm_init_arg会遍历获取到的参数列表,然后根据各参数进行相应的设置和赋值。-XX:+UseParallelGC最后会调用process_argument(tail, args->ignoreUnrecognized, origin)进行设置。

Flag的数据结构(runtime/globashpp):

flagTable这个Flag数组记录了VM参数的名字与存储位置(地址)之间的对应关系。于是通过它就可以实现从字符串到实际全局变量的赋值。

遍历flagTable找到名字所指定的Flag:

然后通过Flag里记录的地址给VM参数对应的全局变量赋值:

在Universe::create_heap()中会根据前面解析出来的堆相关参数,进而创建所需要的堆,并设置相应的GC回收策略。

查找"JavaMain"在哪个文件中:

grep -rn "JavaMain" jdk/src/

查找"Threads::create_vm"方法在哪个文件中:

grep -rn "Threads::create_vm" hotspot/

查找Arguments::parse

查找"Universe::initialize_heap"

以上就是关于Java堆栈溢出的机制与原理全部的内容,包括:Java堆栈溢出的机制与原理、GC的过程、如何在win7下的eclipse中调试Hadoop2.2.0的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10112102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存