摘要:如果設置的太小可能會很容易出現異常。以后每個線程堆棧大小為,以前每個線程堆棧大小為。示例代碼通過無限遞歸來模擬棧溢出捕獲的是,而不是。不讓進程結束,便于使用分析工具來查看內存情況執行結果
介紹
當啟動一個新線程時,JVM就會給這個線程分配一個Java棧(這個棧的內存大小由-Xss參數來設置)。
一個Java棧的基本單位是幀,每一次函數調用就會生成棧幀,占用一定的棧空間。當函數本身需要的內存過大,或者函數調用函數(依賴調用或者遞歸調用)太深,超過了-Xss設置的內存大小,就會拋出StackOverflowError異常。
-Xss:默認值 1M,控制每個線程占用的內存,這個參數決定了函數調用的最大深度。如果設置的太小可能會很容易出現 StackOverflowError 異常。示例代碼JDK 5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
public class StackOverflow { private static int deep = 1; /** * 通過無限遞歸來模擬棧溢出 */ private static void recursion() { deep++; recursion(); } public static void main(String[] args) { try { recursion(); } catch (Throwable e) { // catch 捕獲的是 Throwable,而不是 Exception。因為 StackOverflowError 不屬于 Exception 的子類。 System.out.println("Stack deep : " + deep); e.printStackTrace(); } // 不讓進程結束,便于使用分析工具來查看內存情況 try { Thread.sleep(24 * 60 * 60 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
執行結果
Stack deep : 11429 java.lang.StackOverflowError at com.song.StackOverflow.call(StackOverflow.java:16) at com.song.StackOverflow.call(StackOverflow.java:17) ...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75126.html
摘要:內存溢出分配的內存空間超過系統內存。內存泄漏的原因分析由大塊組成堆,棧,本地方法棧,程序計數器,方法區。內存溢出的原因分析內存溢出是由于沒被引用的對象垃圾過多造成沒有及時回收,造成的內存溢出。小結棧內存溢出程序所要求的棧深度過大導致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序計數器,其他...
摘要:內存溢出的情況就是從類加載器加載的時候開始出現的,內存溢出分為兩大類和。以下舉出個內存溢出的情況,并通過實例代碼的方式講解了是如何出現內存溢出的。內存溢出問題描述元空間的溢出,系統會拋出。這樣就會造成棧的內存溢出。 導言: 對于java程序員來說,在虛擬機自動內存管理機制的幫助下,不需要自己實現釋放內存,不容易出現內存泄漏和內存溢出的問題,由虛擬機管理內存這一切看起來非常美好,但是一旦...
摘要:編譯參見深入理解虛擬機節走進之一自己編譯源碼內存模型運行時數據區域根據虛擬機規范的規定,的內存包括以下幾個運運行時數據區域程序計數器程序計數器是一塊較小的內存空間,他可以看作是當前線程所執行的字節碼的行號指示器。 點擊進入我的博客 1.1 基礎知識 1.1.1 一些基本概念 JDK(Java Development Kit):Java語言、Java虛擬機、Java API類庫JRE(...
摘要:第章內存區域與內存溢出異常運行時數據區域虛擬機在執行程序的過程中會把它所管理的內存劃分為若干個不同的數據區域。即對象指向它的類元數據的指針,虛擬機通過這個指針來確定這個對象是哪個類的實例。 第2章 Java內存區域與內存溢出異常 2.2 運行時數據區域 Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域。根據《Java虛擬機規范(Java SE 7版)...
閱讀 3712·2023-04-25 17:45
閱讀 3426·2021-09-04 16:40
閱讀 999·2019-08-30 13:54
閱讀 2126·2019-08-29 12:59
閱讀 1396·2019-08-26 12:11
閱讀 3273·2019-08-23 15:17
閱讀 1516·2019-08-23 12:07
閱讀 3878·2019-08-22 18:00