stack guard page for java

编程入门 行业动态 更新时间:2024-10-08 18:31:45

stack <a href=https://www.elefans.com/category/jswz/34/1736959.html style=guard page for java"/>

stack guard page for java

jvm 在创建thread的时候会create_stack_guard_pages()来保护我们的线程栈不能超过指定的大小,如果不对栈做限制的话,一旦其超过了为其分配的大小后,将会覆盖后面内存的数据将会产生意想不到的结果,所以jvm使用了stack_guard_pages来做限制。下面以JVM创建 mainThread流程举例(不同的Thread guard page不一样,见倒数第二张图)。看图吧:

调用mprotect函数使得指定内存区域不能被访问,一旦被访问内核将会发送一个SIGSEGV信号给进程
在jvm启动的时候会注册jvm需要处理的信号其中就包括了SIGSEGV
当jvm接收到相应的信号时会调用JVM_handle_linux_signal函数来处理信号(JVM_handle_linux_signal这是一个非常重要的函数,hotspot很多功能特性都是基于捕获内核信号来实现的(最后一张图)。参考:.html)
这里的处理逻辑分了in_stack_yellow_zone还是in_stack_red_zone (第二张图中第四行代码可以得知gurad page 包含了两部分yellow_zone和red_zone ),如果是in_stack_yellow_zone,只是简单地抛出stack overflow exception,如果是in_stack_red_zone,那么意味着不可恢复的异常,程序会挂掉。下图是stack的内存布局(Creating guard page is very expensive. Java thread has HotSpot
guard page, only enable glibc guard page for non-Java thread)

.html

更多推荐

stack guard page for java

本文发布于:2024-02-06 07:07:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747368.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:guard   stack   java   page

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!