JVM虛擬機系統性學習-運行時數據區(堆)

運行時數據區

JVM 由三部分組成:類加載系統、運行時數據區、執行引擎

在這里插入圖片描述

下邊講一下運行時數據區中的構成

根據線程的使用情況分為兩類:

  • 線程獨享(此區域不需要垃圾回收)
    • 虛擬機棧、本地方法棧、程序計數器
  • 線程共享(數據存儲區域,此區域需要垃圾回收)
    • 存儲類的靜態數據和對象數據
    • 堆和方法區

Java 堆在 JVM 啟動時創建內存區域去實現對象、數組與運行時常量的內存分配,它是虛擬機管理最大的,也是垃圾回收的主要內存區域

在這里插入圖片描述

在 JDK1.8 中,堆由兩部分組成:新生代和老年代

而在 JDK1.9 中,取消了新生代和老年代的物理劃分,將堆劃分為若干個區域 Region,如下圖:

在這里插入圖片描述

可以通過代碼查看堆空間的大小:

public class HeapSpaceInitial {public static void main(String[] args) {/**使用Runtime.getRuntime()獲取當前 (運行時數據區) , 是單例的。*/// 返回Java虛擬機中的堆內存總量long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;// 返回Java虛擬機試圖使用的最大堆內存量long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;System.out.println("-Xms: " + initialMemory + "M");System.out.println("-Xmx: " + maxMemory + "M");System.out.println("系統初始內存大小為: " + initialMemory * 64.0 / 1024 + "G");System.out.println("系統最大內存大小為: " + maxMemory * 4.0 / 1024 + "G");/**輸出:-Xms: 243M-Xmx: 3609M系統初始內存大小為: 15.1875G系統最大內存大小為: 14.09765625G*/}
}

通過命令行查看堆中的參數:

jps # 查看運行的進程
jstat -gc 進程id  # 查看該進程的堆中參數

通過 VM options 查看垃圾回收時的信息:

-XX:+PrintGCDetails

Java 中新創建的對象如何分配空間呢?

  1. new 的對象先放 Eden 區(如果是大對象,直接放入老年代)
  2. 當 Eden 區滿了之后,程序還需要創建對象,則垃圾回收器會對 Eden 區進行垃圾回收
  3. 在垃圾回收的時候,會將 Eden 區的幸存對象轉移到 Survivor From 區
  4. 如果再次觸發垃圾回收,此時將 Eden 區的幸存對象轉移到 Survivor To 區中,并且將 Survivor From 區中的幸存對象也轉移到 Survivor To 區
  5. 如果再次出發垃圾回收,此時將 Eden 區和 Survivor To 區中的幸存對象轉移到 Survivor From 區中
  6. 當對象的生存年齡達到 15 時,會被放入老年代

在幸存對象每次轉移的時候,對會將對象的生存年齡 + 1,達到 15 時會放入老年代中

Java 對象只會分配在堆中嗎?

不是的,如果經過 逃逸分析 后發現,一個對象并沒有逃逸出方法的話,就可能被優化為在棧上分配,這是常見的堆外存儲技術。

逃逸分析就是分析對象動態作用域:

  • 對象在方法中被定義后,對象只在方法內部使用,則認為沒有發生逃逸
  • 對象在方法中被定義后,對象被外部方法所引用,則認為發生逃逸

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

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

相關文章

【矩陣】73. 矩陣置零

題目 法1&#xff1a;自己想的笨蛋方法 class Solution {public void setZeroes(int[][] matrix) {Set<Integer> rowSet new HashSet<>();Set<Integer> columnSet new HashSet<>();for (int i 0; i < matrix.length; i) {for (int j 0; j <…

DataGrip常見問題

查詢語句結果沒有輸出在output中 進行如下配置 配置后查詢結果輸出在output中 左側數據庫鏈接信息導航欄被隱藏 以上導航欄被隱藏&#xff0c;按下圖操作調出

【Qt開發流程】之容器類2:使用STL風格迭代器進行遍歷

概述 對于每個容器類&#xff0c;都有兩種stl風格的迭代器類型:一種提供只讀訪問&#xff0c;另一種提供讀寫訪問。應該盡可能使用只讀迭代器&#xff0c;因為它們比讀寫迭代器快。 STL迭代器的API以數組中的指針為模型。例如&#xff0c;操作符將迭代器推進到下一項&#xf…

Java開發工具:IDEA 2023.3(WinMac)中文激活版

IntelliJ IDEA 2023是一款由JetBrains公司出品的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為程序員設計。它以智能、高效和人性化為主要特點&#xff0c;致力于提高開發人員的生產力&#xff0c;幫助程序員更快、更好地編寫代碼。 在智能功能方面&#xff0c;Int…

Panalog 日志審計系統 sprog_deletevent.php SQL 注入漏洞復現

0x01 產品簡介 Panalog大數據日志審計系統定位于將大數據產品應用于高校、 公安、 政企、 醫療、 金融、 能源等行業之中&#xff0c;針對網絡流量的信息進行日志留存&#xff0c;可對用戶上網行為進行審計&#xff0c;逐漸形成大數據采集、 大數據分析、 大數據整合的工作模式…

c語言一維數組總結詳解

目錄 介紹&#xff1a; 一維整型數組&#xff1a; 聲明&#xff1a; 初始化&#xff1a; 打印輸出&#xff1a; 輸出結果&#xff1a; 浮點型數組&#xff1a; 代碼&#xff1a; 運行結果&#xff1a; 補充&#xff1a; 一維字符數組&#xff1a; 字符數組聲明及初始…

Python軸承故障診斷 (二)連續小波變換CWT

目錄 前言 1 連續小波變換CWT原理介紹 1.1 CWT概述 1.2 CWT的原理和本質 2 基于Python的CWT實現與參數對比 2.1 代碼示例 2.2 參數介紹和選擇策略 2.2.1 尺度長度&#xff1a; 2.2.2 小波函數&#xff08;wavelet&#xff09;&#xff1a; 2.3 凱斯西儲大學軸承數據的…

《算法與數據結構》答疑

答疑 問題一問題二問題三問題四 問題一 在匹配成功時&#xff0c;在返回子串位置那里&#xff0c;為什么不是i-t的長度啊&#xff0c;為什么還要加一 問題二 問題三 問題四 問&#xff1a;如果題目讓我們構造一個哈夫曼樹&#xff0c;像我發的這個例題的話&#xff0c;我畫成我…

深度學習與計算機視覺技術的融合

深度學習與計算機視覺技術的融合 一、引言 隨著人工智能技術的不斷發展&#xff0c;深度學習已經成為了計算機視覺領域的重要支柱。計算機視覺技術能夠從圖像和視頻中提取有用的信息&#xff0c;而深度學習則能夠通過學習大量的數據來提高計算機視覺技術的性能。本文將探討深…

貪心算法和動態規劃

目錄 一、簡介 二、貪心算法案例&#xff1a;活動選擇問題 1.原理介紹 三、動態規劃案例&#xff1a;背包問題 1.原理介紹 四、貪心算法與動態規劃的區別 五、總結 作者其他文章鏈接 正則表達式-CSDN博客 深入理解HashMap&#xff1a;Java中的鍵值對存儲利器-CSDN博客…

Java Web——過濾器 監聽器

目錄 1. Filter & 過濾器 1.1. 過濾器概述 1.2. 過濾器的使用 1.3. 過濾器生命周期 1.4. 過濾器鏈的使用 1.5. 注解方式配置過濾器 2. Listener & 監聽器 2.1. 監聽器概述 2.2. Java Web的監聽器 2.2.1. 常用監聽器 2.2.1.1. ServletContextListener監聽器 …

Course3-Week1-無監督學習

Course3-Week1-無監督學習 文章目錄 Course3-Week1-無監督學習1. 歡迎1.1 Course3簡介1.2 數學符號約定 2. K-means算法2.1 K-means算法的步驟2.2 代價函數2.3 選擇聚類數量 3. 異常檢測3.1 異常檢測的直觀理解3.2 高斯分布3.3 異常檢測算法3.4 選取判斷閾值 ε \varepsilon ε…

Redis 持久化 —— 超詳細操作演示!

四、Redis 持久化 四、Redis 持久化4.1 持久化基本原理4.2 RDB持久化4.3 AOF持久化4.4 RDB與AOF對比4.5 持久化技術轉型 五、Redis 主從集群六、Redis 分布式系統七、Redis 緩存八、Lua腳本詳解九、分布式鎖 數據庫系列文章&#xff1a; 關系型數據庫: MySQL —— 基礎語法大全…

【京東服裝推薦系統 - 數據爬取、可視化和個性化推薦】

京東服裝推薦系統 - 數據爬取、可視化和個性化推薦 前言數據集與數據爬取數據分析與可視化Django搭建可視化平臺主要功能1. 數據可視化2. 我的收藏3. 商品推薦4. 登錄注冊5. 信息展示6. 信息管理7. 對數據的收藏8. 推薦 創新點結語 前言 在現今的電商市場中&#xff0c;服裝領…

鴻蒙原生應用/元服務開發-新版本端云一體化模板體驗反饋

一、前言 云端一體化模板是基于Serverless服務構建的一套模板&#xff0c;提供了應用生態常見場景需求的代碼實現&#xff0c;開發者可將所需能力快速部署和集成到自己的應用中。 二、準備 體驗最新的遠端一體化模板&#xff0c;需要將云模板替換掉。為此&#xff0c;我們需要做…

我對遷移學習的一點理解——領域適應(系列3)

文章目錄 1. 領域適應&#xff08;Domain Adaptation&#xff09;的基本概念2.領域適應&#xff08;Domain Adaptation&#xff09;的目標3.領域適應&#xff08;Domain Adaptation&#xff09;的實現方法4.領域適應&#xff08;Domain Adaptation&#xff09;的可以解決的問題…

gittee使用教學

一、git簡介 Git是一個開源的分布式版本控制系統&#xff0c;用于敏捷高效的處理任何大小項目的版本管理。 核心功能&#xff1a; 項目的版本管理 團隊協同開發 二、準備工作 1、下載 Git 2、除了選擇安裝位置以外&#xff0c;其他都無腦安裝 3、檢查一下安裝情況 win…

常用方法和調度

Thread類的方法 1、start()&#xff1a; ①啟動當前線程&#xff08;新的線程&#xff09; ②調用當前線程的run&#xff08; &#xff09;。 2. run()&#xff1a; ①通常須要進行重寫 ②將創建線程要執行的操作聲明在此方法中。 3.、currentThread()&#xff1a; ①靜態方法…

這嵌入式“玩具”也太酷了吧~

大家周末好&#xff0c;我是bug菌&#xff5e; 今天看到有朋友曬出了一個“玩具”&#xff0c;實在是太酷了&#xff0c;嵌入式開發人員誰不愛&#xff1f;于是去了解了下&#xff0c;順便分享給大家&#xff5e; 這機器是clockwork推出的uconsole,console大家這應該很熟悉&…

Leetcode刷題筆記題解(C++):92. 反轉鏈表 II

思路&#xff1a;獲取要反轉的區間&#xff0c;拆開之后進行反轉再拼接 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …