JVM 方法区内存扩大 以及开启GC

本文探讨了在使用OSGi框架时可能遇到的方法区溢出问题,特别是在动态生成大量Class的情况下。文中提供了检查系统配置及调整JVM参数的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为应用使用了OSGi框架,《深入理解JAVA虚拟机》中对使用OSGi时可能产生的方法区溢出有所描述

第一部分:

第二部分

 

可见,OSGi会动态生成大量Class,在OSGi中,即使是同一个类文件,被不同的加载器加载也会视为不同的类。

因此方法区在默认比较小的情况下,可能会溢出,实际上也确实遇到了

 

 

我计划的解决方法

1.确认Linux物理内存大小,free -h

2.确认JDK版本,已确认是64位的 JDK1.6

hotspot1.6中,整个JVM堆内存大小=Xmx=年轻代大小 + 老年代大小。持久代(也就是方法区)要另外算,默认大小是64M(64位JVM由于指针膨胀,默认是85M)

永久代是一片连续的堆空间,在JVM启动之前通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间,当JVM加载的类信息容量超过了参数-XX:MaxPermSize设定的值时,应用将会报OOM的错误

 

3.修改启动脚本

java -Xmx256m -XX:PermSize=128M -XX:MaxPermSize=256MB TestData.java

 

4.

// 查看当前机器上所有运行的java进程名称与pid(进程编号)
jps -l 
// 显示指定的jvm进程所有的属性设置和配置参数
jinfo pid
// 查询某个pid进程对应的应用程序内存占用情况
jmap -heap pid
// 显示进程详情
jstack pid
// jstat: 可以实时监测系统资源占用与jvm运行情况 (位于”jdk_home/bin”目录下)
jstat -class -t 5940

 

转载于:https://www.cnblogs.com/heben/p/7615000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值