java.lang.OutOfMemoryError: Metaspace異常解決的方法
介紹 Metaspace
java8 及以后的版本使用Metaspace來代替永久代,Metaspace是方法區(qū)在HotSpot中的實(shí)現(xiàn),它與持久代最大區(qū)別在于,Metaspace并不在虛擬機(jī)內(nèi)存中而是使用本地內(nèi)存也就是在JDK8中,classe metadata(the virtual machines internal presentation of Java class),被存儲(chǔ)在叫做Metaspace的native memory.
永久代(java 8 后被元空間Metaspace取代了)存放了以下信息:
- 虛擬機(jī)加載的類信息
- 常量池
- 靜態(tài)變量
- 即時(shí)編譯后的代碼
出現(xiàn)問題原因
錯(cuò)誤的主要原因, 是加載到內(nèi)存中的 class 數(shù)量太多或者體積太大。
解決辦法
增加 Metaspace 的大小
-XX:MaxMetaspaceSize=512m
代碼演示
模擬Metaspace空間溢出,我們不斷生成類往元空間灌,類占據(jù)的空間是會(huì)超過Metaspace指定的空間大小的
查看元空間大小
java -XX:+PrintFlagsInitial
設(shè)置配置 這里設(shè)置10m方便演示效果
-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m
編寫代碼
import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class MetaspaceDemo { static class OOM{} public static void main(String[] args) { int i = 0;//模擬計(jì)數(shù)多少次以后發(fā)生異常 try { while (true){ i++; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(OOM.class); enhancer.setUseCache(false); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { return methodProxy.invokeSuper(o,args); } }); enhancer.create(); } } catch (Throwable e) { System.out.println("=================多少次后發(fā)生異常:"+i); e.printStackTrace(); } } }
運(yùn)行結(jié)果:
到此這篇關(guān)于java.lang.OutOfMemoryError: Metaspace異常解決的方法的文章就介紹到這了,更多相關(guān)java.lang.OutOfMemoryError: Metaspace異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java.lang.OutOfMemoryError: GC overhead limit exceeded錯(cuò)誤的解決
- IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法
- IDEA報(bào)java:?java.lang.OutOfMemoryError:?Java?heap?space錯(cuò)誤解決辦法
- 解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題
- 完美解決java.lang.OutOfMemoryError處理錯(cuò)誤的問題
- java.lang.OutOfMemoryError 錯(cuò)誤整理及解決辦法
- java.lang.OutOfMemoryError: Java heap space錯(cuò)誤的問題解決
相關(guān)文章
Java實(shí)現(xiàn)一鍵獲取Mysql所有表字段設(shè)計(jì)和建表語句的工具類
這篇文章主要為大家詳細(xì)介紹了如何利用Java編寫一個(gè)工具類,可以實(shí)現(xiàn)一鍵獲取Mysql所有表字段設(shè)計(jì)和建表語句,感興趣的小伙伴可以了解一下2023-05-05Java數(shù)據(jù)結(jié)構(gòu)之順序表詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之順序表詳解,線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ),需要的朋友可以參考下2023-07-07@PathVariable和@RequestParam傳參為空問題及解決
這篇文章主要介紹了@PathVariable和@RequestParam傳參為空問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫
這篇文章主要介紹了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫密碼加密的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01SpringCloud中分析講解Feign組件添加請求頭有哪些坑梳理
在spring?cloud的項(xiàng)目中用到了feign組件,簡單配置過后即可完成請求的調(diào)用。又因?yàn)橛邢蛘埱筇砑親eader頭的需求,查閱了官方示例后,就覺得很簡單,然后一頓操作之后調(diào)試報(bào)錯(cuò)...下面我們來詳細(xì)了解2022-06-06JSONObject如何轉(zhuǎn)為實(shí)體類對象
介紹了JSONObject轉(zhuǎn)為實(shí)體類對象的三種方法:JSONObject中的toJavaObject方法和getObject方法支持深轉(zhuǎn)換,而JSON中的parseObject方法只能轉(zhuǎn)換一層對象,此外,還補(bǔ)充說明了在對JSON轉(zhuǎn)為實(shí)體類對象時(shí),無論JSON中的數(shù)據(jù)字段是否多于或少于實(shí)體類中字段,轉(zhuǎn)化都不會(huì)報(bào)錯(cuò)2024-11-11Maven直接依賴、間接依賴、依賴沖突、依賴仲裁的實(shí)現(xiàn)
本文主要介紹了Maven直接依賴、間接依賴、依賴沖突、依賴仲裁的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09