温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在java虚拟机中使用jvm方法

发布时间:2021-02-22 18:10:53 来源:亿速云 阅读:158 作者:戴恩恩 栏目:开发技术

这篇文章主要介绍了如何在java虚拟机中使用jvm方法,亿速云小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随亿速云小编来看看吧!

使用下面代码:

for (int i = 0; i <10000; i++) {
CglibWapper c=new CglibWapper("cn.springok.perm"+i)
}

代码解释:会根据传入的参数动态生成一个类以及类的实例。因为对象实例化,类的字段、方法、常量池保存在方法区,因此操作会占用一定内存的。

大量的类可能导致方法区溢出,使用下面的参数运行代码:

-XX:PermSize=10M -XX:MaxPermSize=10M -XX:PrintGCDetails

参数说明:

  • -XX:PermSize=10M 初始永久区大小10M

  • -XX:MaxPermSize 方法区最大内存10M。

  • -XX:PrintGCDetails 打印日志详情。

执行程序部分输出如下:

compacting perm gen total 86272K, used 86136K [0x44600000, 0x49a40000, 0x64600000)

the space 86272K, 99% used [0x44600000, 0x49a1e2f8, 0x49a1e400, 0x49a40000)

系统内存溢出了,扩大-XX:MaxPermSize值,可以生成更多的类。

可以使用工具Visual VM观察方法区的具体使用情况。

如何在java虚拟机中使用jvm方法

需要注意一点

jdk8中永久区被移除了,取而代之的是元数据区,可能方法区依赖jvm的内存吧。元数据区可以使用-XX:MaxMetaspaceSize制定,跟之前版本的-XX:MaxPermSize一样,分配的值越多,就可以支持更多的类。不同的是元数据区是堆外直接内存,与方法永久区不同,在不指定大小的情况下,虚拟机会耗尽所有可用的系统内存。

元数据区发生溢出,虚拟机一样抛出异常,如下:

java.lang.OutOfMemoryError Metaspace

以上就是亿速云小编为大家收集整理的如何在java虚拟机中使用jvm方法,如何觉得亿速云网站的内容还不错,欢迎将亿速云网站推荐给身边好友。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI