JVM運行數據區-Java堆

在這里插入圖片描述

Java堆

堆區(Heap區)是JVM運行時數據區占用內存最大的一塊區域,每一個JVM進程只存在一個堆區,它在JVM啟動時被創建,JVM規范中規定堆區可以是物理上不連續的內存,但必須是邏輯上連續的內存。

1、堆區是線程共享共享的區域,同時也是JVM管理最大的內存區域。
2、JVM規范中描述,所有的對象實例及數組都應該在運行時分配在堆上。而他們的引用會被保存在虛擬機棧中,當方法結束,這些實例不會被立即清除,而是等待垃圾回收。
3、由于堆占用內存大,所以是垃圾回收的重點區域。

堆區的組成

在這里插入圖片描述
堆區的組成分為年輕代(Young Generation)、老年代(Old Generation),年輕代被分為伊甸區和幸存者區,幸存區又被分為Survivor 0(S0)和Survivor 1(S1)。年輕代和老年代比例為1:2,伊甸區和S0、S1比例為8:1:1,當然這個比例都是可以通過JVM參數設置,不同區域存放的對象不同:

1、伊甸區(Eden) :存放大部分新創建對象。
2、幸存區(Survivor):存放Minor GC 之后,Eden區和幸存區(Survivor)本身沒有被回收的對象。
3、老年代:存放Minor GC之后且年齡計數器達到15依然存活的對象、Major GC和Full GC之后仍然存活的對象。

堆空間的大小設置

1、-Xms、-Xmx和-Xmn
Java堆的內存大小是可修改的,默認情況下,初始堆內存為物理內存的1/64,最大為物理內存的1/4。

-Xms:設置初始堆內存,如-Xms64m
-Xmx: 設置最大堆內存,如-Xmx64m
—Xmn: 設置年輕代內存,如-Xmx32m
2、各內存區域比例
年輕代與老年代默認為1:2,可通過-XX:NewRatio參數修改,如-XX:NewRatio=4,即為1:4
伊甸區和S0、S1區默認為8:1:1,可通過-XX:SurvivorRatio參數修改,如-XX:SurvivorRatio=6,通過監測發現設置,以后并不是6:1:1,這是因為Java堆的內存分配策略,關閉內存分配策略,-XX:-UseAdaptiveSizePolicy

3、內存溢出
當JVM無法申請到足夠內存給堆空間或者沒有足夠的空間存儲當前堆中的對象,就會出現java.lang.OutOfMemoryError。

驗證內存溢出

設置-Xmx128m -XX:+PrintGCDetails(打印GC日志),執行如下程序,創建一個128M數組,該數組既無法在eden區存放,也無法在老年代存放,同時,也會觸發一次Full GC,Full GC之后,依然無法存放,拋出OMM異常。

public class HeapSetDemo {public static void main(String[] args) {byte[] b = new byte[1024 * 1024 * 128];}
}
[GC (Allocation Failure) [PSYoungGen: 2007K->856K(38400K)] 2007K->864K(125952K), 0.0007477 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 856K->808K(38400K)] 864K->816K(125952K), 0.0005979 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 808K->0K(38400K)] [ParOldGen: 8K->611K(87552K)] 816K->611K(125952K), [Metaspace: 3210K->3210K(1056768K)], 0.0040897 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 0K->0K(38400K)] 611K->611K(125952K), 0.0002508 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Allocation Failure) [PSYoungGen: 0K->0K(38400K)] [ParOldGen: 611K->593K(87552K)] 611K->593K(125952K), [Metaspace: 3210K->3210K(1056768K)], 0.0042290 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat heap.HeapSetDemo.main(HeapSetDemo.java:13)```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22449.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試題-基礎

Java面試題-基礎 1、Java語言有哪些特點?2、面向對象和面向過程的區別是什么?3、說說標識符的命名規則?4、說說Java八種基本數據類型的大小以及他們的封裝類?5、instanceof關鍵字有什么作用?6、自動裝箱與自動拆箱是什…

「網絡編程」基于 UDP 協議實現回顯服務器

🎇個人主頁:Ice_Sugar_7 🎇所屬專欄:計網 🎇歡迎點贊收藏加關注哦! 實現回顯服務器 🍉socket api🍉回顯服務器🍌實現🥝服務器🥝客戶端 &#x1f3…

純血鴻蒙實戰開發—如何添加頂部tab頁面

1.Tabs組件 Tabs組件的頁面組成包含兩個部分,分別是TabContent和TabBar。TabContent是內容頁,TabBar是導航頁簽欄. 根據不同的導航類型,布局會有區別,可以分為底部導航、頂部導航、側邊導航,其導航欄分別位于底部、頂…

react基礎學習 JSX

JSX的測試網站 Babel Babel 可以測試代碼的效果 JSX實現map列表 注意 key不一樣(使用遍歷的時候) 簡單條件渲染 復雜條件渲染 綁定事件 function App() {const colorse (e)>{console.log("測試點擊",e);}const colorse1 (name)>{…

代碼隨想錄訓練營第六十天 | 84.柱狀圖中最大的矩形

84.柱狀圖中最大的矩形 題目鏈接:. - 力扣(LeetCode) 文檔講解:代碼隨想錄 視頻講解:單調棧,又一次經典來襲! LeetCode:84.柱狀圖中最大的矩形_嗶哩嗶哩_bilibili 狀態:未…

地理信息科學中的大數據挑戰

在信息化爆炸的時代,地理信息科學(GIScience)正經歷著前所未有的變革,其中,地理空間大數據的涌現為科學研究與應用帶來了前所未有的機遇與挑戰。作為地理信息與遙感領域的探索者,本文旨在深入剖析地理空間大…

揭秘HubSpot集客營銷:如何吸引并轉化全球潛在客戶

隨著全球數字化浪潮的推進,企業出海已經成為許多公司擴大市場、增加品牌曝光度的重要戰略。HubSpot集客營銷作為一種以客戶為中心、數據驅動的營銷策略,為企業在海外市場的成功提供了強有力的支持。作為HubSpot亞太地區的合作伙伴,NetFarmer將…

[AIGC] 自定義Spring Boot中BigDecimal的序列化方式

在很多場景下,我們需要對BigDecimal類型的數據進行特殊處理,比如保留三位小數。Spring Boot使用Jackson作為默認的JSON序列化工具,我們可以通過自定義Jackson的序列化器(Serializer)來實現,下面將詳細介紹實…

力扣2730.找到最長的半重復子字符串

力扣2730.找到最長的半重復子字符串 找到相鄰的相同字母后same 再雙指針找到前一組相同字母位置 class Solution {public:int longestSemiRepetitiveSubstring(string s) {int res1,n s.size(),same0;for(int i1,j0;i<n;i){if(s[i] s[i-1] && same > 1)for…

godot的安裝和使用 1

今天是第一節&#xff0c;因此呢先做godot的安裝&#xff0c;其實很簡單 godot官網&#xff1a;https://godotengine.org/ 進入官網&#xff0c; 安裝好之后呢&#xff0c;會有兩個文件 打開第一個就是可視化界面的&#xff0c;進入后是這個樣子 說明安裝成功了

【ArcGIS微課1000例】0115:字段數據類型案例詳解

文章目錄 一、ArcGIS數據類型概述二、案例1. 數字2. 文本3. 日期4. BLOB5. 對象標識符6. 全局標識符一、ArcGIS數據類型概述 創建要素類和表時,需要為各字段選擇數據類型。可用的類型包括多種數字類型、文本類型、日期類型、二進制大對象 (BLOB) 或全局唯一標識符 (GUID)。選…

python高級面試題

1. Python 中的 GIL (Global Interpreter Lock) 是什么? 解答: Python 的 GIL 是全局解釋器鎖,限制了在 CPython 解釋器中同時執行多個線程。GIL 確保在任意時刻只有一個線程執行 Python 字節碼。這是為了保護訪問 Python 對象的內部數據結構免受并發問題的影響。盡管 GIL 會…

鴻蒙開發接口安全:【@ohos.abilityAccessCtrl (訪問控制管理)】

訪問控制管理 說明&#xff1a; 本模塊首批接口從API version 8開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import abilityAccessCtrl from ohos.abilityAccessCtrlabilityAccessCtrl.createAtManager createAtManager(): AtMan…

LeeCode 1787 DP

題意 傳送門 LeeCode 1787 使所有區間的異或結果為零 題解 任一個元素都至多對 k k k個長度為 k k k的區間產生影響&#xff0c;故難以直接依次處理每一個元素。 觀察到滿足條件的數組中模 k k k意義下索引相等的各個元素相同&#xff0c;故可以依次處理每一個同余類。 d p…

OpenCV學習(4.1) 改變顏色空間

1.目標 在本教程中&#xff0c;你將學習如何將圖像從一個色彩空間轉換到另一個&#xff0c;像BGR?灰色&#xff0c;BGR?HSV等除此之外&#xff0c;我們還將創建一個應用程序&#xff0c;以提取視頻中的彩色對象你將學習以下功能&#xff1a;cv2.cvtColor&#xff0c;**cv2.i…

更適合工程師和研究僧的FPGA專項培訓課程

各位編程精英er~ 社區打造的FPGA工程師培訓班上線后&#xff0c;有不少同學后臺私信詢問&#xff1a;“能不能出個那種專門針對某個知識點的課程呢&#xff1f;我想針對自己的薄弱點深入學習。” 貼心如我&#xff0c;當然會滿足大家的學習需求啦。本周&#xff0c;社區FPGA專…

數學學習基本理念與方法

公理&#xff1a;不證自明的命題&#xff0c;一定條件下都認同的正確的結論 定理&#xff1a;在公理基礎上由嚴謹的數學邏輯獲得&#xff08;為證明的&#xff0c;叫猜想&#xff09; 推論&#xff1a;由某個定理推導出來&#xff0c;相對定理約束條件更多&#xff0c;重要程度…

面試題:說說你對 JS 中 this 指向的了解

面試題&#xff1a;說說你對 JS 中 this 指向的了解 JS 的代碼執行環境分為嚴格模式和非嚴格模式&#xff0c;可以通過 use strict 打開嚴格模式&#xff0c;此時 JS 在語法檢查上會更加嚴格。要討論 JS 中的 this 指向問題&#xff0c;也要分為嚴格模式和非嚴格模式進行討論。…

VRRP簡介

一、VRRP 定義概念 VRRP “Virtual Router Redundancy Protocol”即虛擬路由器冗余協議。 一種將多個物理路由器組合成一個虛擬路由器的協議。為了提供網關的冗余備份&#xff0c;提高網絡的可靠性。虛擬路由器擁有虛擬 IP 地址和虛擬 MAC 地址。虛擬信息作為終端設備訪問網絡…

Nextjs使用教程

一.手動創建項目 建議看這個中文網站文檔,這個里面的案例配置都是手動的,也可以往下看我這個博客一步步操作 1.在目錄下執行下面命令,初始化package.json文件 npm init -y2.安裝react相關包以及next包 yarn add next react react-dom // 或者 npm install --save next react…