欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

JVM的內(nèi)存溢出異常說(shuō)明

本篇內(nèi)容介紹了“JVM的內(nèi)存溢出異常說(shuō)明”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)專(zhuān)注于寧縣網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供寧縣營(yíng)銷(xiāo)型網(wǎng)站建設(shè),寧縣網(wǎng)站制作、寧縣網(wǎng)頁(yè)設(shè)計(jì)、寧縣網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造寧縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供寧縣網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

舉例說(shuō)明含義:

-Xss128k

每個(gè)線(xiàn)程的java棧大小,一個(gè)線(xiàn)程java棧所有棧幀大小總和***允許的尺寸128k。

-Xms128m

表示JVM Heap(堆內(nèi)存)最小尺寸128MB,初始分配

-Xmx512m

表示JVM Heap(堆內(nèi)存)***允許的尺寸256MB,按需分配。

-XX:PermSize=20M

設(shè)置方法區(qū)的初始大小

-XX:MaxPermSize=30M

設(shè)置方法區(qū)的***值

Java棧溢出

在Java虛擬機(jī)規(guī)范中,對(duì)這個(gè)區(qū)域規(guī)定了兩種異常狀況:StackOverflowError和OutOfMemoryError異常。

1.StackOverflowError異常

每當(dāng)java程序代碼啟動(dòng)一個(gè)新線(xiàn)程時(shí),Java虛擬機(jī)都會(huì)為它分配一個(gè)Java棧。Java棧以幀為單位保存線(xiàn)程的運(yùn)行狀態(tài)。當(dāng)線(xiàn)程調(diào)用java方法時(shí),虛擬機(jī)壓入一個(gè)新的棧幀到該線(xiàn)程的java棧中。只要這個(gè)方法還沒(méi)有返回,它就一直存在。如果線(xiàn)程的方法嵌套調(diào)用層次太多(如遞歸調(diào)用),隨著java棧中幀的逐漸增多,最終會(huì)由于該線(xiàn)程java棧中所有棧幀大小總和大于-Xss設(shè)置的值,而產(chǎn)生StackOverflowError內(nèi)存溢出異常。例子如下:

/**    * VM Args: -Xss128k    */  public class Test {              private int count = 0;          public static void main(String[] args) {           new Test().method();       }              public void method() {           System.out.println(++count);           method();       }      }

-Xss為128k。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到2312時(shí),發(fā)生如下異常:

Exception in thread "main" java.lang.StackOverflowError      at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:58)      at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:392)      at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:447)      at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)      at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)      at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)      at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)      at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)      at java.io.PrintStream.write(PrintStream.java:476)      at java.io.PrintStream.print(PrintStream.java:547)      at java.io.PrintStream.println(PrintStream.java:686)      at jvm.Test.method(Test.java:17)

修改-Xss為1280k。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到26888時(shí),發(fā)生StackOverflowError異常。隨著-Xss參數(shù)值的增大,可以嵌套的方法調(diào)用層次也相應(yīng)增加。

綜上所述,StackOverflowError異常是由于方法調(diào)用的層次太深,最終導(dǎo)致為某個(gè)線(xiàn)程分配的所有棧幀大小總和大于-Xss設(shè)置的值,從而發(fā)生StackOverflowError異常。

2.OutOfMemoryError異常

java程序代碼啟動(dòng)一個(gè)新線(xiàn)程時(shí),沒(méi)有足夠的內(nèi)存空間為該線(xiàn)程分配java棧(一個(gè)線(xiàn)程java棧的大小由-Xss參數(shù)確定),jvm則拋出OutOfMemoryError異常。例子如下:

/**    * VM Args: -Xss128k    */  public class Test {              public static void main(String[] args) {           int count = 0;           while (true) {               Thread thread = new Thread(new Runnable() {                   public void run() {                       while (true) {                           try {                               Thread.sleep(5000);                           } catch (Exception e) {}                       }                   }               });                 thread.start();               System.out.println(++count);           }       }      }

-Xss為128k。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到11887時(shí),發(fā)生如下異常:

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread      at java.lang.Thread.start0(Native Method)      at java.lang.Thread.start(Thread.java:640)      at jvm.Test.main(Test.java:20)

修改-Xss為1280k。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到1270時(shí),發(fā)生OutOfMemoryError異常。隨著-Xss參數(shù)值的增大,java程序可以創(chuàng)建的總線(xiàn)程數(shù)越少。

Java堆溢出

Java堆用于儲(chǔ)存對(duì)象實(shí)例。當(dāng)需要為對(duì)象實(shí)例分配內(nèi)存,而堆的內(nèi)存占用又已經(jīng)達(dá)到-Xmx設(shè)置的***值。將會(huì)拋出OutOfMemoryError異常。例子如下:

/**    * VM Args: -Xmx5m    */  public class Test {              public static void main(String[] args) {           int count = 0;           List<Object> list = new ArrayList<Object>();           while (true) {               list.add(new Object());               System.out.println(++count);           }       }      }

-Xmx為5m。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到297868時(shí),發(fā)生如下異常:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space      at java.util.Arrays.copyOf(Arrays.java:2760)      at java.util.Arrays.copyOf(Arrays.java:2734)      at java.util.ArrayList.ensureCapacity(ArrayList.java:167)      at java.util.ArrayList.add(ArrayList.java:351)      at jvm.Test.main(Test.java:15)

修改-Xmx為10m。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到670205時(shí),發(fā)生OutOfMemoryError異常。隨著-Xmx參數(shù)值的增大,java堆中可以存儲(chǔ)的對(duì)象也越多。

方法區(qū)溢出

方法區(qū)用于存放java類(lèi)型的相關(guān)信息,如類(lèi)名、訪(fǎng)問(wèn)修飾符、常量池、字段描述、方法描述等。在類(lèi)裝載器加載class文件到內(nèi)存的過(guò)程中,虛擬機(jī)會(huì)提取其中的類(lèi)型信息,并將這些信息存儲(chǔ)到方法區(qū)。當(dāng)需要存儲(chǔ)類(lèi)信息而方法區(qū)的內(nèi)存占用又已經(jīng)達(dá)到-XX:MaxPermSize設(shè)置的***值。將會(huì)拋出OutOfMemoryError異常。對(duì)于這種情況的測(cè)試,基本的思路是運(yùn)行時(shí)產(chǎn)生大量的類(lèi)去填滿(mǎn)方法區(qū),直到溢出。這里需要借助CGLib直接操作字節(jié)碼運(yùn)行時(shí),生成了大量的動(dòng)態(tài)類(lèi)。例子如下:

/**     * VM Args: -XX:MaxPermSize=50M     */   public class Test {                public static void main(String[] args) {            int count = 0;            while (true) {                 Enhancer enhancer = new Enhancer();                 enhancer.setSuperclass(Test.class);                 enhancer.setUseCache(false);                 enhancer.setCallback(new MethodInterceptor() {                    public Object intercept(Object obj, Method method, Object[] args,                       MethodProxy proxy) throws Throwable {                        return proxy.invoke(obj, args);                    }                 });                 enhancer.create();                 System.out.println(++count);            }        }        }

-XX:MaxPermSize為50m。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到3953時(shí),發(fā)生如下異常:

Caused by: java.lang.OutOfMemoryError: PermGen space      at java.lang.ClassLoader.defineClass1(Native Method)      at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)      at java.lang.ClassLoader.defineClass(ClassLoader.java:615)      ... 8 more

修改-XX:MaxPermSize為100m。其中的一次測(cè)試結(jié)果為,當(dāng)count的值累加到8022時(shí),發(fā)生OutOfMemoryError異常。隨著-XX:MaxPermSize參數(shù)值的增大,java方法區(qū)中可以存儲(chǔ)的類(lèi)型數(shù)據(jù)也越多。

“JVM的內(nèi)存溢出異常說(shuō)明”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

標(biāo)題名稱(chēng):JVM的內(nèi)存溢出異常說(shuō)明
轉(zhuǎn)載注明:http://chinadenli.net/article2/jeihic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站改版搜索引擎優(yōu)化、軟件開(kāi)發(fā)面包屑導(dǎo)航、用戶(hù)體驗(yàn)

廣告

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

成都seo排名網(wǎng)站優(yōu)化
日本高清一区免费不卡| 99久久精品一区二区国产| 国产精品一区二区成人在线| 欧美一区二区三区性视频| 国产偷拍盗摄一区二区| 日韩综合国产欧美一区| 国产成人亚洲综合色就色| 国产福利一区二区三区四区| 国产毛片av一区二区三区小说| 一区二区福利在线视频| 欧美亚洲三级视频在线观看| 精品日韩欧美一区久久| 91欧美一区二区三区成人| 亚洲精品福利入口在线| 99久久精品免费看国产高清| 国产熟女高清一区二区| 99国产精品国产精品九九| 国产韩国日本精品视频| 亚洲综合一区二区三区在线| 国产成人精品国产成人亚洲| 爱在午夜降临前在线观看| 日韩性生活视频免费在线观看| 偷拍美女洗澡免费视频| 中文字幕人妻日本一区二区| 麻豆视传媒短视频免费观看| 国产一区二区三区午夜精品| 亚洲欧美日韩色图七区| 暴力性生活在线免费视频| 国产精品一区二区三区欧美| 人妻少妇系列中文字幕| 国产精品夜色一区二区三区不卡 | 国产又爽又猛又粗又色对黄| 欧美乱码精品一区二区三| 深夜福利欲求不满的人妻| 国产欧美亚洲精品自拍| 伊人国产精选免费观看在线视频 | 亚洲精品中文字幕一二三| 超薄丝袜足一区二区三区| 激情国产白嫩美女在线观看| 九九热精品视频免费观看| 国产二级一级内射视频播放 |