运行时数据区之方法区

一、方法区的理解

方法区有个别名叫做Non-Heap(非堆),目的上就是要和堆区分开来,所以我们可以把方法区看作一块独立于堆的内存空间。
在这里插入图片描述
在这里插入图片描述
在HotSpot中可以把永久代看作方法区的实现,JDK1.8后,元空间取代永久代
在这里插入图片描述
元空间与永久代的区别?
在这里插入图片描述

二、设置方法区的大小与OOM

jdk1.7及以前(永久代)
在这里插入图片描述
jdk1.8(元空间)
在这里插入图片描述

内存泄漏(垃圾回收器不回收还有引用的对象,但是这个对象已经没有用了)与内存溢出会导致OOM
在这里插入图片描述

三、方法区的内部结构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一个类的Class文件被类加载器加载到内存中的方法区
1.首先来看Class文件里有什么东西?
在这里插入图片描述

2.总体来说方法区里有这些东西
在这里插入图片描述
类型信息
在这里插入图片描述
域信息
在这里插入图片描述
方法信息
在这里插入图片描述
JIT代码缓存:存储的即时编译器编译好的机器指令
静态变量:类的静态变量
暂时的理解:
static int a= 10;a在堆的静态变量 10在运行时常量池
static Person person = new Person(); new的对象在堆里,尚硅谷的说这个person在new的这个对象里

运行时常量池:
class文件中的常量池在类加载后存放到运行时常量池,同时常量池中的符号引用变成了直接地址引用
① 首先来看class文件中的常量池
在这里插入图片描述

在这里插入图片描述
一个类可能要用到其他类,但不可能把其他类都写到这个Class文件里,所以在常量池里建一个符号引用指向运行时常量池
在这里插入图片描述
在这里插入图片描述

四、永久代为什么会被元空间取代?

  1. 为永久代设置空间是很难确定的
  2. 对永久代的调优是十分困难的

五、方法区的垃圾回收?

必要且苛刻但是回收效果不好
在这里插入图片描述
常量的回收比较简单但类的回收就比较难
类的实例 类的加载器 类对应的Class对象
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值