方法区方法区

方法区

堆、栈、方法去关系

代表位置
位置

方法区

虽然规范当中规定方法区在逻辑上可以看作堆的一部分,但是hostpot虚拟机认为方法区为为单独的一部分。

在这里插入图片描述
元空间和永久代本质区别在于使用的空间不同,永久代使用的java虚拟机内存,元空间使用直接内存在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法区大小设置

可以固定大小或者自动调节大小
固定大小

如何解决OOM和heap space异常?

首先判断是内存溢出还是内存泄漏(什么是内存泄漏:一个不再被程序使用的对象或变量一直被占据在内存中;)
内存泄漏:
原文链接: 链接.
在这里插入图片描述
如果是内存泄漏就找到内存泄漏位置,如果纯粹是内存溢出,就通过修改堆内存大小(Xms和Xmx)或者修改对象生命周期等方法。

方法区内部结构

组成结构
具体细分
具体细分

类型信息

类型信息

域信息

 域信息

方法

方法

静态变量访问

这里通过引用调用对象,即使是赋值为null,也可以访问,因为后台是通过转换为直接通过类进行调用方法和引用

在这里插入图片描述
解释

运行时常量池

运行时常量池
字节码内部常量池

Constant pool:
   #1 = Methodref          #6.#20         // java/lang/Object."<init>":()V
   #2 = Fieldref           #5.#21         // com/company/test/jvm/ClinitStudy.i:I
   #3 = Fieldref           #22.#23        // java/lang/System.out:Ljava/io/PrintStream;
   #4 = Methodref          #24.#25        // java/io/PrintStream.println:(I)V
   #5 = Class              #26            // com/company/test/jvm/ClinitStudy
   #6 = Class              #27            // java/lang/Object
   #7 = Utf8               i
   #8 = Utf8               I
   #9 = Utf8               <init>
  #10 = Utf8               ()V
  。。。。。。

常量池

字节码文件中常量池的作用

简而言之,就是一些引用信息的保存,在运行时可以通过保存的信息调用变量或者类等。就是一张表,方便查找使用的数值、字符串、类型信息引用、方法等。

在这里插入图片描述

运行时常量池

在这里插入图片描述
字符串常量池和静态变量放在堆当中
在JDK8之前,静态变量引用一直放在方法去当中,8开始,放在堆空间当中,实例变量一直放在堆空间当中,而真则真正的实例对象是一直放在堆内存当中。

为什么要把永久带改为元空间?

在这里插入图片描述
在这里插入图片描述

StringTable 为什么要放到堆区?

在这里插入图片描述

方法区的垃圾回收

方法区的垃圾回收

常量的回收

常量的回收

类回收 如上

结构总结

结构总结

面试题

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值