1.JVM运行时数据区和内存模型:

 参考: https://www.cnblogs.com/czwbig/p/11127124.html,写的很漂亮,转载一下,另外总结一下各个区域的异常溢出

 JVM(一)运行时区域

对于这个图,虚拟机栈和本地方法栈相关的溢出少了个OutOfMemoryError,(也是书上的例子,做个总结):

对于HotSpot虚拟机,-Xoss参数可设置本地方法栈大小,但是实际上没有效果,只能通过-Xss参数决定。(Classic虚拟机可以使用-Xoss参数,并生效)

如果设置参数不允许动态扩展栈容量大小,那么无论是由于栈帧太大(比如,大量声明局部变量),还是虚拟机栈容量太小(无限递归,过多占用大量的容量也可以),当新的栈帧内存无法分配的时候,HotSpot虚拟机抛出的都是StackOverflowError异常。

如果,允许动态扩展栈容量大小(同时,限制方法栈的内存很小),那么可能出现的另外一种情况就OutOfMemoryError;换句话说,给每个线程的栈分配的内存越大,可建立的线程数就会越少,在建立过多的线程的时候,导致内存不够用,出现OutOfMemoryError

 

 

 

关于对象头和java锁的相关文章可以参考,JAVA对象头详解和java对象在内存中占用大小:

https://www.cnblogs.com/zhouwangwang/p/13763887.html 

https://blog.csdn.net/qq_28911061/article/details/105348127   

 

 

相关文章:

  • 2022-12-23
  • 2021-04-21
  • 2021-08-22
  • 2021-07-01
  • 2021-08-30
猜你喜欢
  • 2022-01-24
  • 2021-08-17
  • 2021-12-23
  • 2021-04-06
  • 2021-10-03
  • 2022-12-23
  • 2021-05-11
相关资源
相似解决方案