什麼是持久代

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

1 什麼是Perm Generation?java

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

2 爲何要把object對象和class對象分開存儲?jvm

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

2) 歷史緣由:在自定義class loader[3]沒有流行的時代,經過觀察發現class對象不多被unload,所以獨立存儲會減小掃描對象,提升gc的性能。優化

3) 目前技術緣由:目前Perm Gen存在主要是並行回收器回收時須要按照對象被移動的前後順序處理,由於處理一個對象時須要找到對象對應的class信息,而Perm Gen是先於tenured區移動的,這使得處理對象時可以準確找到對應class對象的位置。spa

3 永久區中有什麼?設計

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

4 參考&延伸閱讀:日誌

1) 什麼是Permanent Gen:https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generationhtm

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

相關文章
相關標籤/搜索