類須要同時知足下面3個條件才能算是 「無用的類」 :java
1.該類全部的實例都已經被回收,也就是 Java 堆中不存在該類的任何實例。對象
2.加載該類的 ClassLoader 已經被回收。內存
3.該類對應的 java.lang.Class 對象沒有在任何地方被引用,沒法在任何地方經過反射訪問該類的方法。字符串
如何判斷一個常量是廢棄常量:引用
運行時常量池主要回收的是廢棄的常量。那麼,咱們如何判斷一個常量是廢棄常量呢?反射
假如在常量池中存在字符串"abc" ,若是當前沒有任何String對象引用該字符串常量的話,就說明常量"abc"就是廢棄常量,若是這時發生內存回收的話並且有必要的話," abc"就會被系統清理出常量池。方法
注意:咱們在多是把Java內存區域講的最清楚的一篇文章也講了JDK1.7及以後版本的JVM已經將運行時常量池從方法區中移了出來,在Java堆(Heap) 開闢了一塊區域存放運行時常池字符