日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
classLoader卸載與JVM熱部署

classLoader的卸載機制

目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站托管、企業(yè)網(wǎng)站設計、思明網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

jvm中沒有提供class及classloader的unload方法.那熱部署及osgi中是通過什么機制來實現(xiàn)的呢?實現(xiàn)思路主要是通過更換classLoader進行重新加載.之前的classloader及加載的class類在沒有實例引用的情況下,在perm區(qū)gc的情況下會被回收掉。

perm區(qū)gc時回收掉沒有引用的class是一個怎樣的過程呢?

◆ perm區(qū)達到回收條件后,對class進行引用計算,對于沒有引用的class進行回收。

◆ classLoader實例什么時候被回收呢?(很有可能會進入old gen).perm區(qū)回收一般情況下觸發(fā)full gc是否目的就是清除沒有實例引用此classloader?

內(nèi)存問題

◆ 如果有實例類有對classloader的引用,perm區(qū)class將無法卸載,導致perm區(qū)內(nèi)存一直增加,進而導致perm space error

 
 
 
  1. public static Map pool = new HashMap(); 
  2. public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ 
  3. for (int i=0;i<10000000;i++){ 
  4. test(args); 
  5.  
  6. public static void test(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
  7. ClassLoader cl = new MyLoader(Main.class.getClassLoader()); 
  8. String className = "RealPerson"; 
  9.  
  10. @SuppressWarnings("unchecked") 
  11. Class clazz = (Class) cl.loadClass(className); 
  12. Person p = clazz.newInstance(); 
  13. p.setName("qiang"); 
  14. pool.put(System.nanoTime(), p); 
  15. cl = p.getClass().getClassLoader(); 

推測:

osgi的bundle進行熱部署時有個條件:export class 必須是兼容的.否則需要重啟整個應用才會生效,為什么呢?

osgi的export class是被bundle的parent classloader加載的,bundle內(nèi)部其他類是bundle的classloader加載的,bundle更換后,重新創(chuàng)建classloader,并對bundle進行加載,之前的加載靠jmv gc回收掉。

那osgi 中explort class如果有實例引用的話,是否會導致class無法被gc掉?

如果osgi中沒有做過處理,應該會出現(xiàn)此問題.具體osgi的實現(xiàn)還需要深入研究下,
也許osgi中關于此部分的實現(xiàn)使用了jvm內(nèi)部的JMTI的相關接口,來對內(nèi)存的引用關系進行了修改。

原文鏈接:http://www.cnblogs.com/redcreen/archive/2011/06/02/2068758.html

【編輯推薦】

  1. JVM分代垃圾回收策略的基礎概念
  2. 高手深度解析:JVM是什么
  3. Java七步創(chuàng)建以JDBC連接數(shù)據(jù)庫的程序
  4. 面試Java前必須了解的10個概念
  5. Java中關于OOM的場景及解決方法

網(wǎng)頁題目:classLoader卸載與JVM熱部署
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/dhgdgjg.html