您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何在java虛擬機中使用jvm方法,億速云小編覺得不錯,現在分享給大家,也給大家做個參考,一起跟隨億速云小編來看看吧!
使用下面代碼:
for (int i = 0; i <10000; i++) { CglibWapper c=new CglibWapper("cn.springok.perm"+i) }
代碼解釋:會根據傳入的參數動態生成一個類以及類的實例。因為對象實例化,類的字段、方法、常量池保存在方法區,因此操作會占用一定內存的。
大量的類可能導致方法區溢出,使用下面的參數運行代碼:
-XX:PermSize=10M -XX:MaxPermSize=10M -XX:PrintGCDetails
參數說明:
-XX:PermSize=10M 初始永久區大小10M
-XX:MaxPermSize 方法區最大內存10M。
-XX:PrintGCDetails 打印日志詳情。
執行程序部分輸出如下:
compacting perm gen total 86272K, used 86136K [0x44600000, 0x49a40000, 0x64600000)
the space 86272K, 99% used [0x44600000, 0x49a1e2f8, 0x49a1e400, 0x49a40000)
系統內存溢出了,擴大-XX:MaxPermSize值,可以生成更多的類。
可以使用工具Visual VM觀察方法區的具體使用情況。
需要注意一點:
jdk8中永久區被移除了,取而代之的是元數據區,可能方法區依賴jvm的內存吧。元數據區可以使用-XX:MaxMetaspaceSize制定,跟之前版本的-XX:MaxPermSize一樣,分配的值越多,就可以支持更多的類。不同的是元數據區是堆外直接內存,與方法永久區不同,在不指定大小的情況下,虛擬機會耗盡所有可用的系統內存。
元數據區發生溢出,虛擬機一樣拋出異常,如下:
java.lang.OutOfMemoryError Metaspace
以上就是億速云小編為大家收集整理的如何在java虛擬機中使用jvm方法,如何覺得億速云網站的內容還不錯,歡迎將億速云網站推薦給身邊好友。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。