欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java虛擬機OOM怎么用

本文小編為大家詳細(xì)介紹“Java虛擬機OOM怎么用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java虛擬機OOM怎么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比普洱網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式普洱網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋普洱地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

通過代碼模擬Java虛擬機規(guī)范中描述的各個運行時區(qū)域內(nèi)存溢出的場景。

首先,虛擬機啟動參數(shù)配置如下:

-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
		1	

輸出:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2245)
    at java.util.Arrays.copyOf(Arrays.java:2219)
    at java.util.ArrayList.grow(ArrayList.java:213)
    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:187)
    at java.util.ArrayList.add(ArrayList.java:411)
    at HeapOOM.main(HeapOOM.java:15)
Heap
 def new generation   total 9216K, used 8920K [0x32570000, 0x32f70000, 0x32f70000)
  eden space 8192K, 100% used [0x32570000, 0x32d70000, 0x32d70000)
  from space 1024K, 71% used [0x32d70000, 0x32e26040, 0x32e70000)
  to   space 1024K, 0% used [0x32e70000, 0x32e70000, 0x32f70000)
 tenured generation   total 10240K, used 5693K [0x32f70000, 0x33970000, 0x33970000)
   the space 10240K, 55% used [0x32f70000, 0x334ff7f8, 0x334ff800, 0x33970000)
 compacting perm gen  total 12288K, used 135K [0x33970000, 0x34570000, 0x37970000)
   the space 12288K, 1% used [0x33970000, 0x33991dd8, 0x33991e00, 0x34570000)
    ro space 10240K, 45% used [0x37970000, 0x37df1888, 0x37df1a00, 0x38370000)
    rw space 12288K, 54% used [0x38370000, 0x389f04f8, 0x389f0600, 0x38f70000)
		1	
		2	
		3	
		4	
		5	
		6	
		7	
		8	
		9	
		10	
		11	
		12	
		13	
		14	
		15	
		16	
		17	
		18	

2. 虛擬機棧和本地方法棧溢出

  • 2.1 StackOverflowError

  • 虛擬機拋出StackOverflowError異常,輸出:

    Exception in thread "main" java.lang.StackOverflowError
        at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:7)
        at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:8) ...
    		1	
    		2	
    		3	
    		4	

    需要注意,為每個線程的棧分配的內(nèi)存越大,反而越容易產(chǎn)生棧內(nèi)存溢出異常。 
    這個不難理解,每個線程分配到棧容量越大,可以建立的線程數(shù)量自然就越少,建立線程時就越容易把剩下的內(nèi)存耗盡。 
    因此,可以通過“減少內(nèi)存”的手段來解決棧內(nèi)存溢出問題。
    /**
     * 
     * 
     * 功能描述: 棧OutOfMemoryError 
     * VM Args:-Xss2M 調(diào)大單線程可使用棧空間大小
     * @author zhuyiquan90
     * @created 2017-9-1 上午11:20:06
     * @version 1.0.0
     * @date 2017-9-1 上午11:20:06
     */ public class JavaVMStackOOM { private void dontStop() { while (true) {
            }
        } public void stackLeakByThread() { while (true) {
                Thread thread = new Thread(new Runnable() { @Override public void run() {
                        dontStop();
                    }
                });
                thread.start();
            }
        } public static void main(String[] args) {
            JavaVMStackOOM oom = new JavaVMStackOOM();
            oom.stackLeakByThread();
        }
    }
    		1	
    		2	
    		3	
    		4	
    		5	
    		6	
    		7	
    		8	
    		9	
    		10	
    		11	
    		12	
    		13	
    		14	
    		15	
    		16	
    		17	
    		18	
    		19	
    		20	
    		21	
    		22	
    		23	
    		24	
    		25	
    		26	
    		27	
    		28	
    		29	
    		30	
    		31	
    		32	
    		33	
    		34	
    		35	
    		36	
    		37	

    3. 方法區(qū)和運行時常量池溢出

    JDK 1.7開始逐步“去永久代化”。在JDK 1.6及之前的版本,由于常量池分配在永久代,可以通過-XX:PermSize和-XX:MaxPermSize限制方法區(qū)大小,從而間接限制常量池容量。

    import java.util.ArrayList; import java.util.List; /**
     * 
     * 
     * 功能描述: 運行時常量池內(nèi)存溢出
     * VM Args: -XX:PermSize=10M -XX:MaxPermSize=10M
     * @author 作者 zhuyiquan90
     * @created 2017-9-1 上午11:50:48
     * @version 1.0.0
     * @date 2017-9-1 上午11:50:48
     */ public class RuntimeConstantPoolOOM { public static void main(String[] args) { // 使用List保持常量池引用,避免Full GC回收常量池行為 List<String> list = new ArrayList<String>(); // 10MB的PermSize在integer范圍內(nèi)足夠產(chǎn)生OOM int i =0; while(true) {
                list.add(String.valueOf(i++).intern());
            }
        }
    }
    		1	
    		2	
    		3	
    		4	
    		5	
    		6	
    		7	
    		8	
    		9	
    		10	
    		11	
    		12	
    		13	
    		14	
    		15	
    		16	
    		17	
    		18	
    		19	
    		20	
    		21	
    		22	
    		23	
    		24	
    		25	
    		26	

    在JDK 1.7及以上,while循環(huán)將一直進行下去。

    方法區(qū)用于存放Class的相關(guān)信息,如類名、訪問修飾符、常量池、字段描述、方法描述等。對于這些區(qū)域的測試,基本的思想是運行時產(chǎn)生大量的類去填滿方法去,直到溢出。
    package com.suning; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; /**
     * 
     * 
     * 功能描述: 方法區(qū)內(nèi)存溢出
     * VM Args: -XX:PermSize=10M -XX:MaxPermSize=10M
     * @author 作者 zhuyiquan90
     * @created 2017-9-1 下午3:31:27
     * @version 1.0.0
     * @date 2017-9-1 下午3:31:27
     */ public class JavaMethodAreaOOM { public static void main(String[] args) { while (true) {
                Enhancer enhancer = new Enhancer();
                enhancer.setSuperclass(OOMObject.class);
                enhancer.setUseCache(false);
                enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { // TODO Auto-generated method stub return proxy.invokeSuper(obj, args);
                    }
                });
                enhancer.create();
            }
        } static class OOMObject {
        }
    }
    		1	
    		2	
    		3	
    		4	
    		5	
    		6	
    		7	
    		8	
    		9	
    		10	
    		11	
    		12	
    		13	
    		14	
    		15	
    		16	
    		17	
    		18	
    		19	
    		20	
    		21	
    		22	
    		23	
    		24	
    		25	
    		26	
    		27	
    		28	
    		29	
    		30	
    		31	
    		32	
    		33	
    		34	
    		35	
    		36	
    		37	
    		38	
    		39	
    		40	
    		41	
    		42	
    		43	

    4. 本機直接內(nèi)存溢出

    運行結(jié)果:

    Exception in thread "main" java.lang.OutOfMemoryError at sun.misc.Unsafe.allocateMemory(Native Method)
        at DirectMemoryOOM.main(DirectMemoryOOM.java:14)
    		1	
    		2	
    		3	

讀到這里,這篇“Java虛擬機OOM怎么用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁標(biāo)題:Java虛擬機OOM怎么用
本文地址:http://aaarwkj.com/article34/pccgpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護虛擬主機、服務(wù)器托管、動態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
乱色视频中文字幕在线着| 亚洲精品熟女av影院| 亚洲精品一区久久狠狠欧美| 欧美日在线观看加勒比| 免费一区二区三区黄色| 国产精品久久乱码综合| 免费午夜福利一区二区| 黄片免费视频大全在线观看| 婷婷六月亚洲激情综合| 另类欧美亚洲中文在线综合| 亚洲综合色视频在线播放| 熟女一区二区蜜桃视频| 国产精品九九久久精品三级| 亚洲男人天堂在线播放| 青草草草草草在线观看| 日韩国产一区二区在线观看| 国产精品99久久久久久| 亚洲综合一区国产精品| 国产v精品欧美精品v日韩| 婷婷亚洲五月伊人91| 日本精品人妻一区二区三区蜜桃| 亚洲日本一区二区一本一道| 在线观看高清免费国产| 18禁的视频在线观看| 国产精品久久99精品| 亚洲成人av毛片在线观看| 亚洲巨人精品福利导航| 久久免费看少妇高潮免费| 永久免费观看黄色录像| 国语对白刺激真实精品| 日韩精品在线观看天堂| avav男人天堂亚洲天堂| 人妻伦理一区二区三区| 少妇太爽高潮在线播放| 亚洲欧美日韩国产一区二区三区| 日韩中文免费av一区| 国产精品亚洲国产精品| av天堂高清在线观看| 国产一区二区在线粉嫩| 白白在线观看网站看看亚洲| 久久好大好爽要死了欧美|