java虚拟机jvm方法区实例讲解

 更新时间:2021年02月22日 14:58:01   作者:分享牛  
在本篇文章里小编给大家整理的是一篇关于java虚拟机jvm方法区实例讲解内容,有兴趣的朋友们可以学习下。

和java堆一样,方法区是一块所有线程共享的内存区域,用于保存系统的类信息,类的信息有哪些呢。字段、方法、常量池。方法区也有一块内存区域所以方法区的内存大小,决定了系统可以包含多少个类,如果系统类太多,方法区内存不够肯定会导致方法区溢出,虚拟机同样会抛出内存溢出信息。(内存溢出后面相关文章给大家总结)

jdk6和jdk7中,方法区可以理解为永久区(Perm).永久区可以使用参数-XX:PermSize和-XX:MaxPermSize制定。默认情况下-XX:MaxPermSize为64MB.如果你项目中使用代理模式或者CGLIB的话可能在运行的时候生成大量的类,如果这样,需要设置一下永久区的大小,防止永久区内存溢出。

CGLIB会在后面专门的章节和代理模式一起讲解。(这个系列专注的是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观察方法区的具体使用情况。

需要注意一点

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

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

java.lang.OutOfMemoryError Metaspace

到此这篇关于java虚拟机jvm方法区实例讲解的文章就介绍到这了,更多相关java虚拟机 jvm 方法区实战内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合mybatis-generator插件流程详细讲解

    SpringBoot整合mybatis-generator插件流程详细讲解

    这篇文章主要介绍了SpringBoot整合mybatis-generator插件流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • springboot项目整合注册功能模块开发实战

    springboot项目整合注册功能模块开发实战

    这篇文章主要介绍了springboot项目整合注册功能模块开发实战,在用户的注册是首先需要查询当前的用户名是否存在,如果存在则不能进行注册,相当于一个查询语句,本文通过实例代码详细讲解,需要的朋友可以参考下
    2022-11-11
  • Springboot实现视频上传及压缩功能

    Springboot实现视频上传及压缩功能

    这篇文章主要介绍了Springboot实现视频上传及压缩功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Spring如何自定义XML配置扩展

    Spring如何自定义XML配置扩展

    这篇文章主要介绍了Spring如何自定义XML配置扩展,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java的外部类为什么不能使用private和protected进行修饰的讲解

    Java的外部类为什么不能使用private和protected进行修饰的讲解

    今天小编就为大家分享一篇关于Java的外部类为什么不能使用private和protected进行修饰的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 深入理解Java 对象和类

    深入理解Java 对象和类

    下面小编就为大家带来一篇深入理解Java 对象和类。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 一文详解Java如何创建和销毁对象

    一文详解Java如何创建和销毁对象

    Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。本文主要和大家介绍一下Java是如何创建和销毁对象的,希望对大家有所帮助
    2022-11-11
  • SpringBoot多线程进行异步请求的处理方式

    SpringBoot多线程进行异步请求的处理方式

    这篇文章主要介绍了SpringBoot多线程进行异步请求的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐
    2021-12-12
  • Java集合快速失败与安全失败解析

    Java集合快速失败与安全失败解析

    这篇文章主要介绍了Java集合快速失败与安全失败解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解SpringBoot 处理异常的几种常见姿势

    详解SpringBoot 处理异常的几种常见姿势

    这篇文章主要介绍了详解SpringBoot 处理异常的几种常见姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论