這篇文章主要講解了“java的垃圾回收機(jī)制介紹”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java的垃圾回收機(jī)制介紹”吧!
成都創(chuàng)新互聯(lián)公司長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為湖州企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作,湖州網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。了解了到了絕大部分的對(duì)象是分配在堆上面的,我們?cè)诰幋a的時(shí)候并沒有顯示的指明哪些對(duì)象需要回收,但是程序在運(yùn)行的過程中是會(huì)一直創(chuàng)建對(duì)象的,之所以沒有內(nèi)存溢出是因?yàn)槲覀兊奶摂M機(jī)幫我我們自動(dòng)進(jìn)行了垃圾回收,保證程序運(yùn)行的時(shí)候有足夠的空間來分配我們創(chuàng)建的對(duì)象。
JVM被分為五大內(nèi)存區(qū)域,其中程序計(jì)數(shù)器、虛擬機(jī)棧,本地方法棧是線程私有的,內(nèi)存隨著線程的銷毀而退出。堆和方法區(qū)是動(dòng)態(tài)分配的,由于方法區(qū)的垃圾收集收效甚微,所以本章所說的垃圾回收主要指的是堆內(nèi)存的垃圾回收。
什么樣的對(duì)象會(huì)被回收呢?我們想象下在生活中,什么樣的東西會(huì)被我們?nèi)舆M(jìn)垃圾桶呢,是不是已經(jīng)不再使用的東西或者說是沒有任何利用價(jià)值的東西,在java中也是一樣的,就是不會(huì)再使用到的對(duì)象。那么在java中,怎么判斷這個(gè)對(duì)象是不是不會(huì)再被使用呢?顯然,這似乎要比現(xiàn)實(shí)生活中判斷哪些東西是垃圾要復(fù)雜許多。
前面說到,我們需要知道哪些對(duì)象是需要被回收的,那么怎么判斷這個(gè)對(duì)象是否需要回收呢?
引用計(jì)數(shù)法。
創(chuàng)建對(duì)象的時(shí)候,給對(duì)象添加一個(gè)引用計(jì)數(shù)器,每當(dāng)有一個(gè)地方引用的時(shí)候,就給計(jì)數(shù)器加1,當(dāng)引用失效時(shí),就給計(jì)數(shù)器減1,當(dāng)引用計(jì)數(shù)器為0的時(shí)候,說明這個(gè)對(duì)象不會(huì)再被使用。這種方法被稱為引用計(jì)數(shù)法。引用計(jì)數(shù)法的邏輯比較簡單,效率高,但是卻無法解決對(duì)象和對(duì)象之間的循環(huán)引用的問題。
可達(dá)性算法分析
可達(dá)性分析算法的基本思想是通過被稱為GCRoots的起始點(diǎn)向下搜索,搜索走過的鏈路被稱為引用鏈,如果沒有任何一條鏈路到達(dá)這個(gè)對(duì)象,那么這個(gè)對(duì)象就不會(huì)再被使用,就可以將其回收。
感謝各位的閱讀,以上就是“java的垃圾回收機(jī)制介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)java的垃圾回收機(jī)制介紹這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!