java gc的特性_Java12新特性 -- 可中斷的G1 Mixed GC

Java 12 中增強了 G1 垃圾收集器關于混合收集集合的處理策略,這節主要介紹在 Java 12 中同時也對 G1垃圾回收器進行了改進,使其能夠在空閑時自動將 Java 堆內存返還給操作系統,這也是 Java 12 中的另外一項重大改進。

目前 Java 11 版本中包含的 G1 垃圾收集器暫時無法及時將已提交的 Java 堆內存返回給操作系統。為什么呢? G1目前只有在full GC或者concurrent cycle(并發處理周期)的時候才會歸還內存,由于這兩個場景都是G1極力避免的,因此在大多數場景下可能不會及時歸還committed Java heap memory給操作系統。除非有外部強制執行。

在使用云平臺的容器環境中,這種不利之處特別明顯。即使在虛擬機不活動,但如果仍然使用其分配的內存資源,哪怕是其中的一小部分,G1 回收器也仍將保留所有已分配的 Java 堆內存。而這將導致用戶需要始終為所有資源付費,哪怕是實際并未用到,而云提供商也無法充分利用其硬件。如果在此期間虛擬機能夠檢測到 Java 堆內存的實際使用情況,并在利用空閑時間自動將 Java 堆內存返還,則兩者都將受益。

具體操作

為了盡可能的向操作系統返回空閑內存,G1 垃圾收集器將在應用程序不活動期間定期生成或持續循環檢查整體 Java堆使用情況,以便 G1 垃圾收集器能夠更及時的將 Java 堆中不使用內存部分返還給操作系統。對于長時間處于空閑狀態的應用程序,此項改進將使 JVM 的內存利用率更加高效。

而在用戶控制下,可以可選地執行Full GC,以使返回的內存量最大化。

JDK12的這個特性新增了兩個參數分別是G1 PeriodicGCInterval及G1 PeriodicGCSystemLoadThreshold,設置為0的話,表示禁用。如果應用程序為非活動狀態,在下面兩種情況任何一個描述下,G1 回收器會觸發定期垃圾收集:

自上次垃圾回收完成以來已超過 G1PeriodicGCInterval ( milliseconds ), 并且此時沒有正在進行的垃圾回收

任務。如果 G1PeriodicGCInterval 值為零表示禁用快速回收內存的定期垃圾收集。

應用所在主機系統上執行方法 getloadavg(),默認一分鐘內系統返回的平均負載值低于

G1PeriodicGCSystemLoadThreshold指定的閾值,則觸發full GC或者concurrent GC( 如果開啟

G1PeriodicGCInvokesConcurrent ),GC之后Java heap size會被重寫調整,然后多余的內存將會歸還給操作系統。如果 G1PeriodicGCSystemLoadThreshold 值為零,則此條件不生效。

如果不滿足上述條件中的任何一個,則取消當期的定期垃圾回收。等一個 G1PeriodicGCInterval 時間周期后,將重新考慮是否執行定期垃圾回收。

G1 定期垃圾收集的類型根據 G1PeriodicGCInvokesConcurrent 參數的值確定:如果設置值了,G1 垃圾回收器將繼續上一個或者啟動一個新并發周期;如果沒有設置值,則 G1 回收器將執行一個Full GC。在每次一次 GC 回收末尾,G1 回收器將調整當前的 Java 堆大小,此時便有可能會將未使用內存返還給操作系統。新的 Java 堆內存大小根據現有配置確定,具體包括下列配置:- XX:MinHeapFreeRatio、-XX:MaxHeapFreeRatio、-Xms、-Xmx。

默認情況下,G1 回收器在定期垃圾回收期間新啟動或繼續上一輪并發周期,將最大限度地減少應用程序的中斷。如果定期垃圾收集嚴重影響程序執行,則需要考慮整個系統 CPU 負載,或讓用戶禁用定期垃圾收集。

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

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

相關文章

在Python3中將字符串轉換為字節的最佳方法

To convert a string to bytes, there are more than one way, 要將字符串轉換為字節,有多種方法, Approach 1: use encode() method 方法1:使用encode()方法 test_str "include_help"print(type(test_str))test_bytes test_st…

【Java】PMD規則學習(1) --字符串比較

PMD是一款采用BSD協議發布的Java程序代碼檢查工具。該工具可以做到檢查Java代碼中是否含有未使用的變量、是否含有空的抓取塊、是否含有不必要的對象等。該軟件功能強大,掃描效率高,是Java程序員debug的好幫手。 PMD支持的編輯器包括:JDevelo…

php定義object數據類型,PHP數據類型(4):對象object

//創建一個類class Student{//定義屬性public $name XuGZh;public $age 20;public $sex 男;//定義方法public function getInfo(){//當前對象中訪問自己屬性用偽變量$thisreturn my name:.$this->name..my age:.$this->age..my sex:.$this->sex;}}對象初始化:要創建…

avr計數_使用8位LCD創建計數器| AVR

avr計數This type of counter may be also used in the EVM machines. A counter can be used to count the number of times a button is pressed. It can have many applications. The most widely used counter application is in EVM and also in customer feedback machin…

php將字符變為數字,數字字符怎么轉化為數字 php 怎么將字符轉成數字

java中,String字符串轉化為數字我現在想把一個String字符串轉化為數字, String s"00000123" 我直接使java中String字符串轉化為數字: 轉換為浮點型: 使用Double或者Float的parseDouble或者parseFloat方法進行轉換 Strin…

用U盤作為啟動盤做系統步驟

步驟一:BIOS設置U盤啟動 制作好Win10 U盤系統安裝盤之后,我們需要在電腦的BIOS設置中把第一啟動設備設置為U盤,設置后就可以從我們制作的Win10 U盤系統安裝盤啟動,從而顯示系統安裝界面開始安裝系統。BIOS設置U盤啟動的方法如下&a…

使用tkinter模塊在Python中進行GUI編程

GUI (Graphical User Interface): GUI(圖形用戶界面): GUI is a simple application which helps the user to interact with the computer or any other electronic device through a graphical icon. This used to perform different tasks on a desktop or lapt…

php輕博客社區視頻教程,輕博客主題 - SEO極致優化的ZBLOG輕博客主題

zblog自適應輕博客主題,簡潔、輕巧、極致優化~QQ群:457320274 (問題反饋以及其他鏈接交換等) 交流社區:https://www.bxiu.net/ (有問題可以求助交流)更新記錄:2021.02.22 v2.8 更新內容:1、新增分類自定義標題&#xf…

Composer學習之————Ubuntu14.04下安裝Composer

下載Composer: curl -sS https://getcomposer.org/installer | php 安裝Composer: /usr/bin/php composer.phar --version 設置全局命令: sudo mv composer.phar /usr/local/bin/composer 查看是否安裝與設置成功: composer -vers…

u盤啟動iso 開源_啟動和維護開源項目

u盤啟動iso 開源Lets talk about how to start an open-source project? The process can be classified as in three phases, 讓我們談談如何啟動一個開源項目? 該過程可以分為三個階段, Individual senses the need of the project: This is the pha…

java如何解決高并發癥,JAVA線上故障緊急處理詳細過程!

鏈接:https://fredal.xin/java-error-check?hmsrtoutiao.io&utm_mediumtoutiao.io&utm_sourcetoutiao.io線上故障主要會包括 CPU、磁盤、內存以及網絡問題,而大多數故障可能會包含不止一個層面的問題,所以進行排查時候盡量四個方面依…

程序員如何談加薪?

如果你對現在公司很滿意,只是覺得薪資太低,那么可以先和你的主管聊聊。 首先,講一講自己最近在工作上的成長,看主管是否認同; 然后,從能力提升角度,向主管要一個更大的發展空間和更大的業務挑戰…

php有多少魔術方法,PHP常用的幾個魔術方法

常用的魔術方法有:__Tostring () __Call() __autoLoad() __ clone() __GET() __SET() __isset() __unset()1.__Tostring()用于定義輸出對象引用時調用常用于打印一些對象的信息必須有返回值eg:有一個persion類Persion per new persion()Echo per; //直接…

python常用語法和示例_使用Python中的示例進行輸入和輸出操作

python常用語法和示例A Program needs to interact with the user to accomplish the desired task; this is done using Input-Output facility. Input means the data entered by the user of the program. In python, we have input() and raw_input ( ) function available…

關于node.js和npm 和nvm_byKL

關于node.js和npm 和nvm Node 是一個服務器端 JavaScript 解釋器,Node 本身運行 V8 JavaScript。V8 JavaScript 引擎是 Google 用于其 Chrome 瀏覽器的底層 JavaScript 引擎。 NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題&am…

php 查看擴展 代碼,[擴展推薦] 使用 PHP Insights 在終端查看 PHP 項目代碼質量

PHP Insights 是一個由 Nuno Maduro 發布的、可在控制臺進行 PHP 即時質量檢查的拓展包。在項目的 readme 文件中,可以發現 PHP Insights 的主要功能包含:代碼質量 與 代碼風格 分析一個針對于代碼 結構 和 復雜度 的漂亮的預覽界面在 Laravel、Symfon…

航空機票預訂c#代碼_航空公司座位預訂問題的C ++程序

航空機票預訂c#代碼Problem statement: Write a program to assign passengers seats in an airplane. Assume a small airplane with seat numbering as follows: 問題陳述:編寫一個程序來分配飛機上的乘客座位。 假設小型飛機的座位編號如下: 1 A B C…

linux命令之which

which這個命令可以說并不常用,它的作用是查看可執行文件的位置,并返回第一個搜索結果。可執行文件也就是指的某個系統命令,但是這個命令的位置必須是在PATH路徑里存在的。截圖中 ,pwd的位置在/bin/pwd,當然,這個路徑是…

線性代數向量乘法_向量的標量乘法| 使用Python的線性代數

線性代數向量乘法Prerequisite: Linear Algebra | Defining a Vector 先決條件: 線性代數| 定義向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a mat…

sonar掃描普通JAVA執行,SonarQube掃描源代碼的方法

SonarQube掃描源代碼的方法雷建鋒一、分析源代碼綜述一旦成功安裝了SonarQube平臺,您就可以開始安裝一個分析器并開始創建項目了。在第一次分析時,該平臺會自動創建一個項目。如果您需要在第一個分析之前在項目上設置一些配置,那么您可以選擇…