JVM(一)运行时区域

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

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

 Java线程与内存 -《码出高效》

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

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

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

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

 

2. JVM 堆 VS 本地内存

https://www.jianshu.com/p/60afb21c8876

 

另摘自美团(Java中9种常见的CMS GC问题分析与解决):Java 8 的内存结构简略图以及垃圾回收区域:

GC 主要工作在 Heap 区和 MetaSpace 区(上图蓝色部分),在 Direct Memory 中,如果使用的是 DirectByteBuffer,那么在分配内存不够时则是 GC 通过 Cleaner#clean 间接管理。

 

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

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

https://blog.youkuaiyun.com/qq_28911061/article/details/105348127   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值