电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java虛擬機常見內存溢出錯誤匯總

瀏覽:2日期:2022-08-24 18:53:16

一、引言

從事java開發的小伙伴在平時的開發工作中,應該會遇見各式各樣的異常和錯誤,在實際工作中積累的異常或者錯誤越多,趟過的坑越多,就會使我們編碼更加的健壯,就會本能地避開很多嚴重的坑。以下介紹幾個Java虛擬機常見內存溢出錯誤。以此警示,避免生產血案。

二、模擬Java虛擬機常見內存溢出錯誤

1、內存溢出之棧溢出錯誤

package com.jayway.oom; /** * 棧溢出錯誤 * 虛擬機參數:-Xms10m -Xmx10m * 拋出異常:Exception in thread 'main' java.lang.StackOverflowError */ public class StackOverflowErrorDemo { public static void main(String[] args) { stackOverflowError(); } private static void stackOverflowError() { stackOverflowError(); } }

2、內存溢出之堆溢出錯誤

package com.jayway.oom; import java.util.Random; /** * 堆溢出錯誤 * 虛擬機參數:-Xmx10m -Xms10m * 拋出異常:Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space */ public class JavaHeapSpaceErrorDemo { public static void main(String[] args) { String temp = 'java'; //不斷地在堆中開辟空間,創建對象,撐爆堆內存 while (true) { temp += temp + new Random().nextInt(111111111) + new Random().nextInt(222222222); temp.intern(); } } }

3、內存溢出之GC超過執行限制錯誤

package com.jayway.oom; import java.util.ArrayList; import java.util.List; /** * GC超過執行限制錯誤 * 虛擬機參數:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m * * 拋出異常:Exception in thread 'main' java.lang.OutOfMemoryError: GC overhead limit exceeded * * 導致原因:GC回收時間過長會拋出OutOfMemoryError,何為過長,即超過98%的cpu時間用來做GC垃圾回收 * 但是回收效果甚微,僅僅只有2%的CPU時間用來用戶程序的工作,這種狀態是很糟糕的,程序在不斷地GC * 形成惡性循環,CPU的使用率一直是滿負荷的,正經活卻沒有干,這種情況虛擬機只好拋出錯誤來終止程序的執行 * * 不斷地Full GC,事倍功微 * [Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7167K->7161K(7168K)] 9215K->9209K(9728K), [Metaspace: 3529K->3529K(1056768K)], 0.0291829 secs] [Times: user=0.08 sys=0.02, real=0.03 secs] */ public class GCOverheadErrorDemo { public static void main(String[] args) { int i = 0; List<String> list = new ArrayList<>(); try { while (true) { list.add(String.valueOf(++i).intern()); } } catch (Throwable e) { System.out.println('*****************i:' + i); e.printStackTrace(); throw e; } } }

4、內存溢出之直接內存溢出錯誤

package com.jayway.oom; import java.nio.ByteBuffer; /** * 直接內存溢出錯誤 * 拋出異常:Exception in thread 'main' java.lang.OutOfMemoryError: Direct buffer memory * * 配置虛擬機參數:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m * * 導致原因:通常NIO程序經常使用ByteBuffer來讀取或者寫入數據,這是一種基于通道(Channel)與緩沖區(Buffer)的IO方式, * 它可以使用Native函數庫直接分配堆外內存,然后通過一個存儲在java堆里面的DirectByteBuffer對象作為這塊內存的引用, * 這樣能子一些場景中顯著提高性能,因為避免了在Java堆和Native內存中來回復制數據。 * * ByteBuffer.allocate(capability):分配JVM堆內存,數據GC的管轄范圍,由于需要拷貝所以速度相對較慢 * * ByteBuffer.allocate(capability):分配OS本地內存,不屬于GC管轄范圍,由于不需要內存拷貝,所以速度相對較快。 * * 但是如果不斷分配本地內存,堆內存很少使用,那么JVM就不需要執行GC,DirectByteBuffer對象就不會被回收,此時如果繼續分配堆外內存, * 可能堆外內存已經被耗光了無法繼續分配,此時程序就會拋出OutOfMemoryError,直接崩潰。 * */ public class DirectBufferMemoryErrorDemo { public static void main(String[] args) { //默認JVM配置的最大直接內存是總物理內存的四分之一 long maxDirectMemory = sun.misc.VM.maxDirectMemory() / 1024 / 1024; System.out.println('配置的maxDirectMemory:' + maxDirectMemory + 'MB'); ByteBuffer byteBuffer = ByteBuffer.allocateDirect(6 * 1024 * 1024); } }

5、內存溢出之無法創建新的本地線程

package com.jayway.oom; /** * 內存溢出之無法創建新的本地線程 * 拋出異常:java.lang.OutOfMemoryError: unable to create new native thread * * 描述: * 高并發請求服務器時,經常出現java.lang.OutOfMemoryError: unable to create new native thread * native thread異常與對應的平臺有關 * * 導致原因: * 1、應用程序創建了太多線程了,一個應用進程創建的線程數超過系統承載極限。 * 2、操作系統并不允許你的應用進程創建這么多的線程,linux系統默認允許單個進程可以創建的線程數是1024個 * * 解決方法: * 1、想辦法降低應用進程創建的線程數量, * 2、如果應用程序確實需要這么多線程,超過了linux系統的默認1024個限制,可以通過修改linux服務器配置,提高這個閾值。 * */ public class UnableCreateNativeThreadErrorDemo { public static void main(String[] args) { for (int i = 0; true; i++) { System.out.println('***************i:' + i);//不斷得創建新線程,直到超過操作系統允許應用進程創建線程的極限 new Thread(() -> { try { Thread.sleep(Integer.MAX_VALUE); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); } } }

6、內存溢出之元空間溢出錯誤

package com.jayway.oom; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * 元空間溢出錯誤 * 拋出異常:java.lang.OutOfMemoryError: Metaspace * * 設置虛擬機參數:-XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=8m * * 描述:Java8及以后的版本使用Metaspace來替代了永久代。metaspace是方法區在HotSpot中的實現,它與持久代最大的區別在于 * Metaspace并不在虛擬機內存中而是在本地內存中。 * * 元空間存儲了以下信息: * 1、虛擬機加載的類信息 * 2、常量池 * 3、靜態變量 * 4、即時編譯后的代碼 * */ public class MetaspaceErrorDemo { static class OOMTest { } public static void main(String[] args) { int count = 0; try { //cglib不斷創建類,模擬Metaspace空間溢出,我們不斷生成類往元空間中灌,超過元空間大小后就會拋出元空間移除的錯誤 while (true) { count++; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(OOMTest.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('************多少次后發生了異常:' + count); e.printStackTrace(); } } }

以上就是Java虛擬機常見內存溢出錯誤匯總的詳細內容,更多關于Java虛擬機內存溢出的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 深圳市源和塑胶电子有限公司-首页| 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | 小型单室真空包装机,食品单室真空包装机-百科 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 茅茅虫AI论文写作助手-免费AIGC论文查重_写毕业论文降重 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 广西资质代办_建筑资质代办_南宁资质代办理_新办、增项、升级-正明集团 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | _网名词典_网名大全_qq网名_情侣网名_个性网名| LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 |