什么是持久代


之前排查問題有涉及到一些jvm的知識,之前提到的是一些基礎的gc日志知識,這次接着簡單分析jvm的設計原理,相信jvm的設計方法會對我們在項目設計時有些啟發。

1 什么是Perm Generation?

 持久存儲的jvm使用的class對象,class對象,就像其他存儲在堆中的對象一樣。class對象也和object對象一樣被存儲和gc。class對象和其他對象的關系如圖。

2 為什么要把object對象和class對象分開存儲?

1) 哲學原因:在軟件哲學上看,class對象是jvm需要的,object對象是應用開發需要的,分開存儲,應用開發就不需要關心jvm的那些對象。

2) 歷史原因:在自定義class loader[3]沒有流行的時代,通過觀察發現class對象很少被unload,因此獨立存儲會減少掃描對象,提高gc的性能。

3) 目前技術原因:目前Perm Gen存在主要是並行回收器回收時需要按照對象被移動的先后順序處理,因為處理一個對象時需要找到對象對應的class信息,而Perm Gen是先於tenured區移動的,這使得處理對象時能夠准確找到對應class對象的位置。

3 永久區中有什么?

  • 類的方法(字節碼...)
  • 類名(Sring對象)
  • .class文件讀到的常量信息
  • class對象相關的對象列表和類型列表 (e.g., 方法對象的array).
  • JVM創建的內部對象
  • JIT編譯器優化用的信息

4 參考&延伸閱讀:

1) 什么是Permanent Gen:https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

2) 各種收集器:https://blogs.oracle.com/jonthecollector/entry/our_collectors

3) ClassLoader簡介:http://www.javaworld.com/article/2077260/learn-java/the-basics-of-java-class-loaders.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM