Java虚拟机第一章实践

Java虚拟机第一章实践
Java堆溢出

​ · Java堆溢出通常是对象创建过多,通过设置Java堆最大值,可以进行实验,将堆的最小值(-Xms)与最大值(-Xmx)设置相等便可防止堆自动扩展。

虚拟机栈与本地方法栈溢出

​ 请求栈深大于所允许最大深度(StackOverflow)

​ 扩展栈时无法申请足够空间(OutOfMemory)

​ 32位操作系统限制进程内存为2GB,分配给堆,方法区,程序计数器不计,剩下的就给了本地方法栈。如果内存溢出,可以通过减小堆内存来增大本地方法栈。

方法区与内存常量池溢出

​ 常量池溢出,比如字符串创建过多。

​ 方法区用于存放Class信息,因此遇到类增强与动态语言时(JSP,框架,CGlib),就容易遇到方法区溢出问题。

​ intern()方法在JDK1.7,JDK1.6运行结果不一样,原因在于JDK1.6中intern采取复制,JDK1.7中采用在常量池中直接标记引用的方法。

直接内存溢出

​ 直接内存默认与最大堆内存相等。

​ 如果遇到非明显异常,Dump文件很小,有可能就是直接内存溢出。

附录:虚拟机参数设置

​ -XMs 堆最小大小

​ -XMm 堆最大大小

​ -XX:+HeapDumpOnOutOfMemoryError Dump处OOM快照以便分析

​ -Xss 本地方法栈大小

​ -XX:PermSize 方法区大小

​ -XX:MaxPermSize 方法区最大大小

​ -XX:MaxDirectMemorySize 直接内存大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值