无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。1.3 如何判断一个常量是废弃常量
JDK1.2之前,Java中引用的定义很传统:假如reference范例的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。
JDK1.2以后,Java对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐削弱)
引用范例详解可见本文第六节。
假如在字符串常量池中存在字符串"abe",假如当前没有任何String对象引用该字符串常量的话,就说明常量"abc"就是废弃常量,假如这时发生内存回收的话而且有必要的话,"abc"就会被系统清理出常量池了。
- JDK1.7之前运行时常量池逻辑包罗字符串常量池存放在方法区,此时hotspot虚拟机对方法区的实现为永久代
- JDK1.7字符串常量池被从方法区拿到了堆中,这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区,也就是hotspot中的永久代,
- JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之,这时候字符串常量池还在堆,运行时常量池还在方法区,只不过方法区的实现从永久代变成了元空间(IMetaspace)
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |