2014-02-24 54 views
4

當我們發現沒有加載的類會不斷增加,導致非堆內存增加時,我們正在對其中一箇舊應用程序進行性能測試。加載的類的總數不斷增加

現在,我一直在尋找rootcauses,有一件事我能想到的是,在幾個地方,我們使用的是像下面的Class.forName:

Test a = (Test) Class.forName(className, false, Test.class.getClassLoader()).newInstance(); 

這可能是一個原因? 如果在上面的代碼語句中classname是相同的,調用class.forName是否一次又一次加載相同的類。

應用服務器:Jboss的6.1 EAP

JDK:27年6月1日

+0

你有一些代碼在飛行中生成類(可能是AOP或代理)? – Henry

+0

我們正在使用EJB,所以是的,我們會爲創建的bean對象創建ejb代理。 – Rips

回答

2

因爲,類裝載器將是相同的,它不會再次加載類再次&。只有當您有多個類加載器在不同時間點加載類時,才能重新加載同一個類。

每個類加載器,首先檢查它的即將加載的類是否已經加載。如果它沒有加載,那麼只有它會加載它。