java虛擬機之內存分配

Java 的自動內存管理主要是針對對象內存的回收和對象內存的分配。同時,Java 自動內存管理最核心的功能是 內存中對象的分配與回收。

JDK1.8之前的堆內存示意圖:

從上圖可以看出堆內存分為新生代、老年代和永久代。新生代又被進一步分為:Eden 區+Survivor1 區+Survivor2 區。值得注意的是,在 JDK 1.8中移除整個永久代,取而代之的是一個叫元空間(Metaspace)的區域(永久代使用的是JVM的堆內存空間,而元空間使用的是物理內存,直接受到本機的物理內存限制)。

1.對象優先在eden區分配

目前主流的垃圾收集器都會采用分代回收算法,因此需要將堆內存分為新生代和老年代,這樣我們就可以根據各個年代的特點選擇合適的垃圾收集算法。

大多數情況下,對象在新生代中 eden 區分配。當 eden 區沒有足夠空間進行分配時,虛擬機將發起一次Minor GC.下面我們來進行實際測試以下。

在測試之前我們先來看看 Minor GC和Full GC 有什么不同呢?

  • 新生代GC(Minor GC):指發生新生代的的垃圾收集動作,Minor GC非常頻繁,回收速度一般也比較快。
  • 老年代GC(Major GC/Full GC):指發生在老年代的GC,出現了Major GC經常會伴隨至少一次的Minor GC(并非絕對),Major GC的速度一般會比Minor GC的慢10倍以上。

2.大對象直接進入老年代

大對象就是需要大量連續內存空間的對象(比如:字符串、數組)。

為什么要這樣呢?

為了避免為大對象分配內存時由于分配擔保機制帶來的復制而降低效率。

3.長期存活的對象將進入老年代?

既然虛擬機采用了分代收集的思想來管理內存,那么內存回收時就必須能識別哪些對象應放在新生代,哪些對象應放在老年代中。為了做到這一點,虛擬機給每個對象一個對象年齡(Age)計數器。如果對象在 Eden 出生并經過第一次 Minor GC 后仍然能夠存活,并且能被 Survivor 容納的話,將被移動到 Survivor 空間中,并將對象年齡設為1.對象在 Survivor 中每熬過一次 MinorGC,年齡就增加1歲,當它的年齡增加到一定程度(默認為15歲),就會被晉升到老年代中。對象晉升到老年代的年齡閾值,可以通過參數 -XX:MaxTenuringThreshold 來設置。

4 動態對象年齡判定

為了更好的適應不同程序的內存情況,虛擬機不是永遠要求對象年齡必須達到了某個值才能進入老年代,如果 Survivor 空間中相同年齡所有對象大小的總和大于 Survivor 空間的一半,年齡大于或等于該年齡的對象就可以直接進入老年代,無需達到要求的年齡。

?

轉載于:https://www.cnblogs.com/Dream-chasingGirl/p/10351575.html

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

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

相關文章

知道無人駕駛的網絡安全有多重要嗎?英國政府都決定插手開發了

這樣的策略也被解讀為,英國政府希望借此搶占未來無人駕駛汽車研發的先機。 相信看過下午我們有關速8中黑科技的文章的朋友們,一定對有關車輛網絡安全印象深刻,也足以見得未來無人駕駛時代的網絡安全問題有多重要。所以,英國政府決…

linux uniq命令_如何在Linux上使用uniq命令

linux uniq命令Fatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / ShutterstockThe Linux uniq command whips through your text files looking for unique or duplicate lines. In this guide, we cover its versatility and features, as well as how you c…

解決 display 和 transition 沖突的問題

問題: 既需要“顯示、隱藏”’效果,也需要動畫效果。此時使用了xxx.style.display "none / block" 之后,我們發現 transition 動畫效果就沒有了。 解決辦法一:用定時器(這種方法并不好) btn2.on…

win10任務欄和開始菜單_如何將網站固定到Windows 10任務欄或開始菜單

win10任務欄和開始菜單Having quick access to frequently-used or hard to remember websites can save you time and frustration. Whether you use Chrome, Firefox, or Edge, you can add a shortcut to any site right to your Windows 10 taskbar or Start menu. 快速訪問…

智能家居的尷尬:概念比用戶火

智能家居概念的走俏與用戶的接受程度成鮮明的對比,如何才能撬開這個市場,這是整個行業都需要思考的問題。 追溯起源,智能家居已經有20年的歷史,但由于技術缺陷、價格昂貴,實用性差、安裝復雜及產品同質化嚴重等原因&a…

WEB_矛盾

題目鏈接:http://123.206.87.240:8002/get/index1.php 題解: 打開題目,看題目信息,本題首先要弄清楚 is_numeric() 函數的作用 作用如下圖: 即想要輸出flag,num既不能是數字字符,不能為數1&…

如何在Windows上解決藍牙問題

Bluetooth gives you the freedom to move without a tether, but it isn’t always the most reliable way to use wireless devices. If you’re having trouble with Bluetooth on your Windows machine, you can follow the steps below to troubleshoot it. 藍牙使您可以不…

Multicast注冊中心

1234提供方啟動時廣播自己的地址。   消費方啟動時廣播訂閱請求。   提供方收到訂閱請求時&#xff0c;單播自己的地址給訂閱者&#xff0c;如果設置了unicastfalse&#xff0c;則廣播給訂閱者。   消費方收到提供方地址時&#xff0c;連接該地址進行RPC調用。 <du…

阻止a鏈接跳轉方法總結

總結下a標簽阻止默認行為的幾種簡單方法(1) <a href"javascript:void(0);" > 點我 </a> onclick方法負責執行js函數&#xff0c;而void是一個操作符&#xff0c;void(0)返回undefined&#xff0c;地址不發生跳轉。 <a href"javascript:;&qu…

美味奇緣_輕松訪問和管理您的美味書簽

美味奇緣Looking for an easy way to access and manage your Delicious Bookmarks collection with minimal UI impact? Now you can with SimpleDelicious for Firefox. 是否正在尋找一種簡單的方法來訪問和管理您的Delicious Bookmarks收藏&#xff0c;而對UI的影響最小&am…

談談如何使用Netty開發實現高性能的RPC服務器

RPC&#xff08;Remote Procedure Call Protocol&#xff09;遠程過程調用協議&#xff0c;它是一種通過網絡&#xff0c;從遠程計算機程序上請求服務&#xff0c;而不必了解底層網絡技術的協議。說的再直白一點&#xff0c;就是客戶端在不必知道調用細節的前提之下&#xff0c…

寒假萬惡之源3:抓老鼠啊~虧了還是賺了?

1.代碼&#xff1a; #include<iostream>using namespace std;int main(){ char a/*操作*/; int i/*計數工具*/,b0/*老鼠會開心幾天*/; int e/*正常的來*/,f/*老鼠會悲傷幾天*/; int c1/*老鼠來不來*/,d0/*奶酪數目*/,g0/*老鼠數目*/; for (i1;;i) { …

在Firefox中結合Wolfram Alpha和Google搜索結果

Do you wish there was a way to combine all that Wolfram Alpha and Google goodness together when you search for something? Now you can with the Wolfram Alpha Google extension for Firefox. 您是否希望有一種方法可以在搜索某些內容時將Wolfram Alpha和Google的所有…

Docker容器中開始.NETCore之路

一、引言  開始寫這篇博客前&#xff0c;已經嘗試練習過好多次Docker環境安裝,.Net Core環境安裝了&#xff0c;在這里替騰訊云做一個推廣,假如我們想學習、練手.net core 或是Docker卻苦于沒有開發環境&#xff0c;服務器也不想買&#xff0c;那么我們可以使用騰訊云提供的開…

分布式的數據一致性

一.前序 數據的一致性和系統的性能是每個分布式系統都需要考慮和權衡的問題。一致性的級別如下&#xff1a;1.強一致性這種一致性級別是最符合用戶直覺的&#xff0c;它要求系統寫入什么&#xff0c;讀出來的也會是什么&#xff0c;用戶體驗好&#xff0c;但實現起來往往對系統…

kompozer如何啟動_使用KompoZer創建網站

kompozer如何啟動Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在尋找一種輕松創建自己的網頁的方法&#…

我也說說宏定義likely()和unlikely()

作者&#xff1a;gfree.windgmail.com 博客&#xff1a;blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft歸gfree.windgmail.com所有&#xff0c;使用GPL發布&#xff0c;可以自由拷貝&#xff0c;轉載。但轉載請保持文檔的完整性&#xff0c;注明原作者及…

圖片懶加載與預加載

預加載 常用的是new Image();&#xff0c;設置其src來實現預載&#xff0c;再使用onload方法回調預載完成事件。function loadImage(url, callback) {var img new Image(); //創建一個Image對象&#xff0c;實現圖片的預下載img.src url;if (img.complete){ // 如果圖片已經存…

電腦pin重置_如果忘記了如何重置Windows PIN

電腦pin重置A good password or PIN is difficult to crack but can be difficult to remember. If you forgot or lost your Windows login PIN, you won’t be able to retrieve it, but you can change it. Here’s how. 好的密碼或PIN很難破解&#xff0c;但很難記住。 如果…

android.support不統一的問題

今天supprt28遇到的問題&#xff0c;由于28還是預覽版&#xff0c;還存在一些bug 都是因為如果程序內出現不同的&#xff0c;support或者其他外部引用庫的多個版本&#xff0c;Gradle在進行合并的時候會使用本地持有的&#xff0c;最高版本的來進行編譯&#xff0c;所以25的sup…