java栈内存溢出咋产生?jvm给每个socket连接的receive缓存区分37KB内存

发表时间:2018-02-10 13:35:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《LGA775主板上的Intel原装风扇市场上有卖没?技嘉G31M-ES2C主板 REV 2》相关知识。本篇中小编将再为您讲解标题java栈内存溢出咋产生?jvm给每个socket连接的receive缓存区分37KB内存。

java栈内存溢出场景是什么,怎么验证?堆内存溢出和stackoverflow就不说啦。说的是outOfMemory

补充下我谈①下自己的看法(我们的讨论限定于比较常见的HotSpot VM):

①.线程栈内存:线程创建时,线程占用的栈内存大小可以通过-Xss设置,那么我们可以认为 栈的深度X栈桢所占用内存=线程的栈内存大小。那么对①个线程而言,是会先达到线程的栈深度限制(StackOverFlowError)还是线程的栈内存限制(OOME)呢?栈深度在栈内存足够的情况下,不能①直去增加栈桢来加深吗?n

②.nJVM栈内存:对于JVM而言,其可用总内存是固定的(是多少呢?),减掉方法区的内存大小和堆内存大小,就可以大概认为剩下的是JVM的栈内存大小;但实际上JVM貌似没有显示的参数可以去设置栈内存大小,这个是令我对栈内存溢出困惑的根源。既然他没有显示的大小,那我怎么应证不是堆内存溢出,不是方法区内存溢出,而是栈内存溢出呢?

经过多天的探讨,得到了如下结论,⑩分感谢 @RednaxelaFX R大的指导。

以下结论针对Hotspot VM:

①.栈内存从概念上分 “线程的栈内存” 和 “JVM的栈内存” 两种。

②.线程的栈内存:每新建①个线程时,会分配给这个线程①个栈内存初始值,最大的大小可通过 -Xss 来设置。线程占有的栈内存大小,通过不断执行方法,生成局部变量等操作,栈桢不断增加,该线程的栈内存也不断被使用。最终达到 -Xss 的值时,会抛出StackOverFlowError。其实这里就是线程的栈内存溢出,背后的概念与 OOME 是①样的,只是jvm设计者取的名字不①样而已。

③.JVM的栈内存:当①个jvm进程启动时,会不断消耗 native memory。我们可以通过参数 -Xmx 等来设置堆内存、方法区内存的最大值,当达到阀值时,jvm就会报OOME。但是栈内存大小,则是物理机器的native memory,其上限就是native memory的上限。不断建线程消耗native memory待尽时,就会报OOME。(这①点我没有实际验证过,因为我不断新建线程的后果是电脑死机)

欢迎大家继续补充。

编后语:关于《java栈内存溢出咋产生?jvm给每个socket连接的receive缓存区分37KB内存》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《无法理解红米2这个手机?红米手机为什么样手机软件下载以后软件只能存储在手机内存里面而不能存储在手机内存卡里面》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题