java虚拟机JVM方法区(OOM、垃圾回收等)

本文详细介绍了Java虚拟机JVM中的方法区,包括方法区的基本理解、大小设置与OOM异常、常量池、运行时常量池、方法区的演进及垃圾收集。在JDK8中,永久代被元空间取代,以解决空间大小调整困难和垃圾回收效率低等问题。方法区主要存储类型信息、常量、静态变量和编译后的代码,其垃圾收集主要关注废弃常量和不再使用的类型。
摘要由CSDN通过智能技术生成

8. 方法区

8.1 方法区的基本理解

  • 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。
  • 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。
  • 方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。
  • 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误: java.lang.outOfMemory PermGen space或者java.lang.outOfMemoryError: Metaspace
  • 关闭JVM就会释放这个区域的内存。

JDK8放弃永久代的概念,使用JRockit的元空间来代替。元空间不再虚拟机设置的内存中,而是使用本地内存

8.2 方法区的大小的设置与OOM

  • jdk7及以前:

    • 通过-XX:PermSize来设置永久代初始分配空间。默认值是20.75M
    • -XX:MaxPernSize来设定永久代最大可分配空间。32位机器默认是64M,64位机器模式是82M
    • 当JVM加载的类信息容量超过了这个值,会报异常outOfMemoryError:PermGenspace。
  • jdk8及以后:

    • 元数据区大小可以使用参数-XX:MetaspaceSize-XX
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值