美文网首页
JVM学习5·常量池(方法区)

JVM学习5·常量池(方法区)

作者: 那钱有着落吗 | 来源:发表于2022-01-19 09:59 被阅读0次

    1.Class常量池

    Class常量池主要分为两个:

    • 字面量
    • 符号引用

    下图中就是反编译之后的代码,我们可以观察到反编译之后可以看到有很多类的相关信息版本 名称 最后修改时间之类的,还有各种方法接口字段等信息,然后还有个重要的就是常量池了


    上图中就是字面量以及符号引用的解释:

    字面量就是“值”,就好比一个字符串a=“b” 那么b就是字面量

    符号引用就好比我们正常写的方法的引用一个类,到了内存中,必须得替换为真是的内存地址也就是直接引用,不然写一个代码的引用也不知道到底引用到真实内存的哪一个对象。

    2.运行时常量池

    jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。

    运行时常量池也会存放从符号引用转换而来的直接引用,要注意的是在JDK1.7之后实现是在堆中实现的

    3.字符串常量池

    由于String使用的频率非常高,所以String常量池说白了就是hotspot为了高效的处理String字符串专门划分的区域
    要说字符串常量池,那就首先讲一下String这个基本数据类型吧:


    从图中可以看到String这个类是被final修饰的,也就意味着这个类是不可变的,然后最重要的实现是下面的两个字段,一个是char数组一个是hash值,所以String有几个特点:
    *1.安全
    *2.Hash唯一
    *3.用于字符串常量池

    关于字符串,是比较基础的,在一般的面试中也是比较基础的题,所以相关详细的可以在网上查一下,有大量的资料去讲这个。

    相关文章

      网友评论

          本文标题:JVM学习5·常量池(方法区)

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