JVM調優總結(3):垃圾回收面臨的問題

如何區分垃圾

?

上面說到的“引用計數”法,通過統計控制生成對象和刪除對象時的引用數來判斷。垃圾回收程序收集計數為0的對象即可。但是這種方法無法解決循環引用。所以,后來實現的垃圾判斷算法中,都是從程序運行的根節點出發,遍歷整個對象引用,查找存活的對象。那么在這種方式的實現中,垃圾回收從哪兒開始的呢?即,從哪兒開始查找哪些對象是正在被當前系統使用的。上面分析的堆和棧的區別,其中棧是真正進行程序執行地方,所以要獲取哪些對象正在被使用,則需要從Java棧開始。同時,一個棧是與一個線程對應的,因此,如果有多個線程的話,則必須對這些線程對應的所有的棧進行檢查。

?

?

同時,除了棧外,還有系統運行時的寄存器等,也是存儲程序運行數據的。這樣,以棧或寄存器中的引用為起點,我們可以找到堆中的對象,又從這些對象找到對堆中其他對象的引用,這種引用逐步擴展,最終以null引用或者基本類型結束,這樣就形成了一顆以Java棧中引用所對應的對象為根節點的一顆對象樹,如果棧中有多個引用,則最終會形成多顆對象樹。在這些對象樹上的對象,都是當前系統運行所需要的對象,不能被垃圾回收。而其他剩余對象,則可以視為無法被引用到的對象,可以被當做垃圾進行回收。

?

因此,垃圾回收的起點是一些根對象(java棧, 靜態變量, 寄存器…)。而最簡單的Java棧就是Java程序執行的main函數。這種回收方式,也是上面提到的“標記-清除”的回收方式

?

如何處理碎片

?

由于不同Java對象存活時間是不一定的,因此,在程序運行一段時間以后,如果不進行內存整理,就會出現零散的內存碎片。碎片最直接的問題就是會導致無法分配大塊的內存空間,以及程序運行效率降低。所以,在上面提到的基本垃圾回收算法中,“復制”方式和“標記-整理”方式,都可以解決碎片的問題。

?

如何解決同時存在的對象創建和對象回收問題

?

垃圾回收線程是回收內存的,而程序運行線程則是消耗(或分配)內存的,一個回收內存,一個分配內存,從這點看,兩者是矛盾的。因此,在現有的垃圾回收方式中,要進行垃圾回收前,一般都需要暫停整個應用(即:暫停內存的分配),然后進行垃圾回收,回收完成后再繼續應用。這種實現方式是最直接,而且最有效的解決二者矛盾的方式。

?

但是這種方式有一個很明顯的弊端,就是當堆空間持續增大時,垃圾回收的時間也將會相應的持續增大,對應應用暫停的時間也會相應的增大。一些對相應時間要求很高的應用,比如最大暫停時間要求是幾百毫秒,那么當堆空間大于幾個G時,就很有可能超過這個限制,在這種情況下,垃圾回收將會成為系統運行的一個瓶頸。為解決這種矛盾,有了并發垃圾回收算法,使用這種算法,垃圾回收線程與程序運行線程同時運行。在這種方式下,解決了暫停的問題,但是因為需要在新生成對象的同時又要回收對象,算法復雜性會大大增加,系統的處理能力也會相應降低,同時,“碎片”問題將會比較難解決。

轉載于:https://www.cnblogs.com/jxhd1/p/6547607.html

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

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

相關文章

RoHS、無鉛制程、無鹵 的基本介紹

一、RoHS是歐盟對電子電器產品不能超標含有某些有害物質的禁令;在具體產品生產中,從原材料的選擇、采購到制程中可能會污染產品(和產品接觸)的生產輔助材料,都必須不能超標含有(有最大允許濃度)…

springCloud分布式事務實戰(九)改造ThemeMicroService 支持分布式事務

&#xff08;1&#xff09; 添加jar <!-- springCloud 事務 關鍵點1 --><dependency><groupId>com.codingapi</groupId><artifactId>transaction-springcloud</artifactId><version>${lcn.last.version}</version><exclu…

日常的一天學習

今天的學習仍然沒有特別明確的計劃&#xff0c;也許自己不應該再徘徊&#xff0c;專心做java編程挺好的啊&#xff0c;也許還能找到不錯的工作&#xff0c;可是自己始終還是想成為一個研究安全的人&#xff0c;只是不知道自己在畢業的時候能不能成長到靠安全來養活自己。 早上主…

庖丁解牛-----Live555源碼徹底解密(根據MediaServer講解Rtsp的建立過程)

live555MediaServer.cpp服務端源碼講解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/18923139) int main(int argc, char** argv) { // Begin by setting up our usage environment: TaskScheduler* scheduler BasicTaskScheduler::createNew(); Usa…

運放搭建主動濾波電路

主動低通濾波電路 R1R216K R3R4100K C1C20.01uF 放大倍數AvR4/(R3R4) Freq1KHz 主動高通濾波電路 C12*C20.02uF,C20.01uF R1R2110K 6dBLow-cutFreq100Hz

deployd使用

安裝node,用npm 安裝deployd , npm install deployd -g。 cd進入文件夾&#xff0c;輸入 dpd create deploydDemo&#xff0c;然后 dpd -p 5500 deploydDemo\app.dpd&#xff08;5500是你開啟的mongodb創建的服務&#xff09;&#xff0c;接著在瀏覽器中輸入 http://localhost:…

android自定義布局實現優惠券效果

最近需要實現一個凹凸效果的擬物化優惠券效果&#xff0c;我一看&#xff0c;本來想用.9圖片做背景實現的&#xff0c;雖說圖片做背景實現省事兒方便&#xff0c;但是能用代碼實現最好不過了&#xff0c;最終我還是選擇了用代碼來實現&#xff0c;于是有了下文。 最終效果圖 de…

郵件實現詳解(四)------JavaMail 發送(帶圖片和附件)和接收郵件

好了&#xff0c;進入這個系列教程最主要的步驟了&#xff0c;前面郵件的理論知識我們都了解了&#xff0c;那么這篇博客我們將用代碼完成郵件的發送。這在實際項目中應用的非常廣泛&#xff0c;比如注冊需要發送郵件進行賬號激活&#xff0c;再比如OA項目中利用郵件進行任務提…

運放搭建電壓電流轉換電路分析

如下圖電路&#xff0c;電流可以轉換成電壓&#xff0c;電壓也可以轉換成電流&#xff1b; 根據虛斷&#xff1a;(Vi–V1)/R2 (V1–V4)/R6 &#xff08;a&#xff09; 同理 (V3–V2)/R5V2/R4 &#xff08;b&#xff09; 根據虛短&#xff1a; V1V2 &#xff08;c&#xff09…

centos7裝完chrome無法使用yum問題解決

2019獨角獸企業重金招聘Python工程師標準>>> 續前文裝好chrome后&#xff0c;yum居然用不了&#xff0c;提示錯誤“Basic XLib functionality test failed!” 呵呵。。。呵呵了.... 【題外話~個人真心覺得pythonseleniumchrome在linux環境下開發和使用 簡直蛋疼無比…

實驗二第二部分

第二部分 FTP協議分析 1. 兩個同學一組&#xff0c;A和B。 2.A同學架設FTP服務器&#xff0c;并設置用戶名和密碼&#xff0c;例如gao / gao 3.B同學在機器中安裝Wireshark&#xff0c;并將其打開&#xff1b;之后用用戶名和密碼登陸A同學的FTP服務器&#xff0c;并上傳一張圖片…

運放搭建的跟隨電路作用與分析

電壓跟隨器&#xff0c;顧名思義就是輸出電壓與輸入電壓是相同的&#xff0c;就是說電壓跟隨器的電壓放大倍數恒小于且接近1。 電壓跟隨器的顯著特點就是&#xff0c;輸入阻抗高&#xff0c;而輸出阻抗低。 根據其顯著特點&#xff0c;常見的作用如下&#xff1a; 1- 緩沖 在…

Spring Boot(十二)單元測試JUnit

一、介紹 JUnit是一款優秀的開源Java單元測試框架&#xff0c;也是目前使用率最高最流行的測試框架&#xff0c;開發工具Eclipse和IDEA對JUnit都有很好的支持&#xff0c;JUnit主要用于白盒測試和回歸測試。 白盒測試&#xff1a;把測試對象看作一個打開的盒子&#xff0c;程序…

介紹TCP/udp比較好的博客

http://blog.csdn.net/nana_93/article/details/8743525

Kubernetes容器上下文環境

目錄貼&#xff1a;Kubernetes學習系列 下面我們將主要介紹運行在Kubernetes集群中的容器所能夠感知到的上下文環境&#xff0c;以及容器是如何獲知這些信息的。 首先&#xff0c;Kubernetes提供了一個能夠讓容器感知到集群中正在發生的事情的方法&#xff1a;環境變量。作為容…

Shell-腳本只能運行1次

用空文件進行判斷 pathpwd if [ -f ${path}/.runned ]; then {echo "This script can only execute once! You have runned it!"exit } elsetouch ${path}/.runned fi 轉載于:https://www.cnblogs.com/music378/p/7677648.html

運放電壓跟隨電路應用

電壓跟隨器的顯著特點&#xff1a;輸入阻抗高&#xff0c;輸出阻抗低。 如下所示為利用放大器搭建的電壓跟隨電路&#xff0c;方便測量電壓大小&#xff1a; 此電路目的是測量電池電壓&#xff0c;電池電壓范圍&#xff08;3~4.2V&#xff09;分壓后最大電壓為2.1V 屬于3.3V電…

Mac與Phy組成原理的簡單分析

Mac與Phy組成原理的簡單分析 2011-12-28 15:30:43 //http://blog.chinaunix.net/uid-20528014-id-3050217.html 本文乃fireaxe原創&#xff0c;使用GPL發布&#xff0c;可以自由拷貝&#xff0c;轉載。但轉載請保持文檔的完整性&#xff0c;并注明原作者及原鏈接。內容可任意使…

[BZOJ3994][SDOI2015]約數個數和

3994: [SDOI2015]約數個數和 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1104 Solved: 762 [Submit][Status][Discuss]Description 設d(x)為x的約數個數&#xff0c;給定N、M&#xff0c;求 Input 輸入文件包含多組測試數據。 第一行&#xff0c;一個整數T&#xff0…

月蝕動漫獲快看漫畫600萬元A輪戰略投資,走國漫精品化路線

11月5日消息&#xff0c;月蝕動漫宣布獲得快看漫畫600萬元A輪戰略投資。 據了解&#xff0c;月蝕動漫曾于2017年1月獲得原力創投的百萬級種子輪投資&#xff0c;2018年1月獲得英諾天使基金的百萬級天使輪投資。 據月蝕動漫創始人賀小桐透露&#xff0c;團隊能在行業寒冬期獲得…