美文网首页JVM探索
小白懂JVM系列-运行时数据区之方法区

小白懂JVM系列-运行时数据区之方法区

作者: 余生爱静 | 来源:发表于2021-03-22 23:09 被阅读0次

一、方法区是什么

java虚拟机规范里解释,方法区是可供各个线程共享的运行时区域

二、方法区能做什么

方法区域传统语言中的编译代码存储区或者操作系统进程的正文字段的作用非常类似,它存储了每一个类的结构信息,例如,运行时常量池字段方法数据构造数据普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法

运行时常量池字段方法数据构造数据普通方法的字节码,当类加载器把class文件加载进虚拟机之后,class文件里面的这几部分内容就会保存到方法区里面。

三、设置方法区的内存大小

jdk7之前

(1)-XX:PermSize设置永久代初始分配空间默认是20.75M

(2)-XX:MaxPermSize设置最大永久代分配空间,32位机器默认64M,64位机器默认82M

(3)当jvm加载的类信息容量超过了这个值,会报异常java.lang.OutOfMemoryError:PermGen space

jdk8及以后

(1)元数据区大小可以使用参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize指定

(2)默认值依赖于平台,windows下,-xx:MetaspaceSize是21.75M,-XX:MaxMetaspaceSize的值是-1,即没有限制

(3)默认情况下,虚拟机会耗尽所有的可用系统内存,如果元数据区发生溢出,虚拟机一样会抛出OutOfMemoryError:Metaspace

(4)-xx:MetaspaceSize:设置初始的元空间大小。对于一个64位的服务器端jvm来说,其默认值-xx:MetaspaceSize的值是21M,这就是初始的高水位线,一旦触及这个水位线,Full GC将会触发并卸载没用的类,然后高水位线会被重置。新的高水位线的值取决于GC后释放了多少元空间。如果释放的空间不足,那么在不超过MaxMetaspaceSize时,适当提高该值。如果释放空间过多,则降低该值。

(5)如果初始高水位线设置过低,上述高水位线调整情况发生很多次,通过垃圾回收器的日志可以观察到Full GC多次调用。为了避免频繁的GC,建议将-XX:MetaspaceSize设置为一个相对较高的值。

四、处理OOM

(1)OOM或者heap space异常,一般使用内存映像分析工具对dump出来的堆存储快照分析,分析是内存泄漏还是内存溢出

(2)如果是内存泄漏,可进一步通过查看GC roots的引用链,查找到泄漏对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收。

(3)如果不是内存泄漏,那就是说对象必须存活,此时需要增加虚拟机的参数(-Xmx和-Xms)

相关文章

  • 小白懂JVM系列-运行时数据区之方法区

    一、方法区是什么 java虚拟机规范里解释,方法区是可供各个线程共享的运行时区域 二、方法区能做什么 方法区域传统...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • JVM结构书目录

    JVM结构 JVM结构之运行时数据区 JVM结构之执行引擎 JVM结构之类加载子系统 JVM结构之本地方法接口(J...

  • 《深入理解Java虚拟机-JVM高级特性与最佳实践》学习总结(第

    一、运行时数据区 JVM将我们机器上的内存当做一个运行时数据区来进行处理。该运行时数据区包括以下几个部分: 方法区...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • JVM系列三(运行时数据区)

    Java虚拟机(JVM)系列三 运行时数据区 一.运行时数据区整体架构 JVM定义了若干种程序在运行期间会使用到运...

  • 简述 JVM 的内存模型

    JVM 运行时数据区:线程共享数据区: 方法区、堆线程私有数据区: 程序计数器、虚拟机栈、本地方法堆 1. 程序计...

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

网友评论

    本文标题:小白懂JVM系列-运行时数据区之方法区

    本文链接:https://www.haomeiwen.com/subject/xukacltx.html