成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JVM 棧(stack)溢出案例

ConardLi / 2145人閱讀

摘要:如果設(shè)置的太小可能會(huì)很容易出現(xiàn)異常。以后每個(gè)線程堆棧大小為,以前每個(gè)線程堆棧大小為。示例代碼通過(guò)無(wú)限遞歸來(lái)模擬棧溢出捕獲的是,而不是。不讓進(jìn)程結(jié)束,便于使用分析工具來(lái)查看內(nèi)存情況執(zhí)行結(jié)果

介紹

當(dāng)啟動(dòng)一個(gè)新線程時(shí),JVM就會(huì)給這個(gè)線程分配一個(gè)Java棧(這個(gè)棧的內(nèi)存大小由-Xss參數(shù)來(lái)設(shè)置)。

一個(gè)Java棧的基本單位是幀,每一次函數(shù)調(diào)用就會(huì)生成棧幀,占用一定的??臻g。當(dāng)函數(shù)本身需要的內(nèi)存過(guò)大,或者函數(shù)調(diào)用函數(shù)(依賴調(diào)用或者遞歸調(diào)用)太深,超過(guò)了-Xss設(shè)置的內(nèi)存大小,就會(huì)拋出StackOverflowError異常。

-Xss:默認(rèn)值 1M,控制每個(gè)線程占用的內(nèi)存,這個(gè)參數(shù)決定了函數(shù)調(diào)用的最大深度。如果設(shè)置的太小可能會(huì)很容易出現(xiàn) StackOverflowError 異常。    

JDK 5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無(wú)限生成,經(jīng)驗(yàn)值在3000~5000左右。

示例代碼
public class StackOverflow {

    private static int deep = 1;

    /**
     * 通過(guò)無(wú)限遞歸來(lái)模擬棧溢出
     */
    private static void recursion() {
        deep++;
        recursion();
    }

    public static void main(String[] args) {
        try {
            recursion();
        } catch (Throwable e) { // catch 捕獲的是 Throwable,而不是 Exception。因?yàn)?StackOverflowError 不屬于 Exception 的子類。
            System.out.println("Stack deep : " + deep);
            e.printStackTrace();
        }

        // 不讓進(jìn)程結(jié)束,便于使用分析工具來(lái)查看內(nèi)存情況
        try {
            Thread.sleep(24 * 60 * 60 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

執(zhí)行結(jié)果

Stack deep : 11429
java.lang.StackOverflowError
    at com.song.StackOverflow.call(StackOverflow.java:16)
    at com.song.StackOverflow.call(StackOverflow.java:17)
    ...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75126.html

相關(guān)文章

  • 關(guān)于JVM內(nèi)存溢出的原因分析及解決方案探討

    摘要:內(nèi)存溢出分配的內(nèi)存空間超過(guò)系統(tǒng)內(nèi)存。內(nèi)存泄漏的原因分析由大塊組成堆,棧,本地方法棧,程序計(jì)數(shù)器,方法區(qū)。內(nèi)存溢出的原因分析內(nèi)存溢出是由于沒(méi)被引用的對(duì)象垃圾過(guò)多造成沒(méi)有及時(shí)回收,造成的內(nèi)存溢出。小結(jié)棧內(nèi)存溢出程序所要求的棧深度過(guò)大導(dǎo)致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序計(jì)數(shù)器,其他...

    xuexiangjys 評(píng)論0 收藏0
  • 十種JVM內(nèi)存溢出的情況,你碰到過(guò)幾種?

    摘要:內(nèi)存溢出的情況就是從類加載器加載的時(shí)候開(kāi)始出現(xiàn)的,內(nèi)存溢出分為兩大類和。以下舉出個(gè)內(nèi)存溢出的情況,并通過(guò)實(shí)例代碼的方式講解了是如何出現(xiàn)內(nèi)存溢出的。內(nèi)存溢出問(wèn)題描述元空間的溢出,系統(tǒng)會(huì)拋出。這樣就會(huì)造成棧的內(nèi)存溢出。 導(dǎo)言: 對(duì)于java程序員來(lái)說(shuō),在虛擬機(jī)自動(dòng)內(nèi)存管理機(jī)制的幫助下,不需要自己實(shí)現(xiàn)釋放內(nèi)存,不容易出現(xiàn)內(nèi)存泄漏和內(nèi)存溢出的問(wèn)題,由虛擬機(jī)管理內(nèi)存這一切看起來(lái)非常美好,但是一旦...

    ShevaKuilin 評(píng)論0 收藏0
  • JVM詳解1.Java內(nèi)存模型

    摘要:編譯參見(jiàn)深入理解虛擬機(jī)節(jié)走進(jìn)之一自己編譯源碼內(nèi)存模型運(yùn)行時(shí)數(shù)據(jù)區(qū)域根據(jù)虛擬機(jī)規(guī)范的規(guī)定,的內(nèi)存包括以下幾個(gè)運(yùn)運(yùn)行時(shí)數(shù)據(jù)區(qū)域程序計(jì)數(shù)器程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,他可以看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器。 點(diǎn)擊進(jìn)入我的博客 1.1 基礎(chǔ)知識(shí) 1.1.1 一些基本概念 JDK(Java Development Kit):Java語(yǔ)言、Java虛擬機(jī)、Java API類庫(kù)JRE(...

    TANKING 評(píng)論0 收藏0
  • 摘記《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第2版)》

    摘要:第章內(nèi)存區(qū)域與內(nèi)存溢出異常運(yùn)行時(shí)數(shù)據(jù)區(qū)域虛擬機(jī)在執(zhí)行程序的過(guò)程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。即對(duì)象指向它的類元數(shù)據(jù)的指針,虛擬機(jī)通過(guò)這個(gè)指針來(lái)確定這個(gè)對(duì)象是哪個(gè)類的實(shí)例。 第2章 Java內(nèi)存區(qū)域與內(nèi)存溢出異常 2.2 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)在執(zhí)行Java程序的過(guò)程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。根據(jù)《Java虛擬機(jī)規(guī)范(Java SE 7版)...

    zoomdong 評(píng)論0 收藏0
  • jvm調(diào)優(yōu)

    摘要:垃圾回收垃圾檢測(cè)引用計(jì)數(shù)法和可達(dá)性分析算法。引用計(jì)數(shù)法給一個(gè)對(duì)象添加引用計(jì)數(shù)器,每當(dāng)有個(gè)地方引用它,計(jì)數(shù)器就加,引用失效就減。通常會(huì)在老年代內(nèi)存被占滿時(shí)將會(huì)觸發(fā),回收整個(gè)堆內(nèi)存。 基礎(chǔ)知識(shí) JVM - HotSpot內(nèi)存布局(1.8之前版本) showImg(https://segmentfault.com/img/bVMdE6?w=1024&h=608); 1.8版本開(kāi)始,持久區(qū)沒(méi)有...

    jemygraw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<