分析原因:java內存大體分爲年輕代、年老代、永久代,PermGen space即是永久代,其中年輕代存放生命期較短的對象實例,GC頻率高,年老代存放生命期較長的對象實例,GC頻低,永久代存放元數據信息(如類的字節碼),理論上無GC。
測試:我使用CXF的動態Client來調用WebService,經過測試發現CXF的WebService動態調用,每次創建Client時,CXF會根據WSDL文檔生成代理類,類加載器會加載這些類,這些字節碼會被加載到永久代,從而導致永久代無止境擴大,因此發生永久代內存溢出。
解決辦法:初始化一次,不要每次都重新加載。