在Java的記憶體分析中,我們會經常聽到關于“常量池”的描述,實際上常量池也分了以下三種:
1. 全局字元串常量池(String Pool)
全局字元串常量池中存放的内容是在類加載完成後存到String Pool中的,在每個VM中隻有一份,存放的是字元串常量的引用值(在堆中生成字元串對象執行個體)。
2. class檔案常量池(Class Constant Pool)
class常量池是在編譯的時候每個class都有的,在編譯階段,存放的是常量(文本字元串、final常量等)和符号引用。
3. 運作時常量池(Runtime Constant Pool)
運作時常量池是在類加載完成之後,将每個class常量池中的符号引用值轉存到運作時常量池中,也就是說,每個class都有一個運作時常量池,類在解析之後,将符号引用替換成直接引用,與全局常量池中的引用值保持一緻。
1 2 3 4 5 6 7 8 | |