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.用于字符串常量池
关于字符串,是比较基础的,在一般的面试中也是比较基础的题,所以相关详细的可以在网上查一下,有大量的资料去讲这个。
网友评论