物品回收平台java代码_java垃圾回收
jvm何時(shí)回收一個(gè)java對(duì)象所占的內(nèi)存?
當(dāng)java對(duì)象失去引用時(shí),JVM垃圾回收機(jī)制會(huì)清除他們,回收所占內(nèi)存空間。
java有沒有內(nèi)存泄漏?
無用的內(nèi)存沒有被回收就是內(nèi)存泄漏。
C++內(nèi)存泄漏:內(nèi)存是由程序員顯示回收,忘了回收會(huì)導(dǎo)致內(nèi)存泄漏
java內(nèi)存泄漏:不可達(dá)對(duì)象由jvm回收不會(huì)導(dǎo)致內(nèi)存泄漏,可達(dá)的但程序員不使用的對(duì)象會(huì)導(dǎo)致內(nèi)存泄漏,其實(shí)就是浪費(fèi)內(nèi)存,占著空間自己又不用。
數(shù)組的remove
element[--size]=null刪除元素要把引用賦值為null,否則就內(nèi)存泄漏
自定義stack的pop
elementData[size]=null同樣的道理
jvm回收java對(duì)象內(nèi)存細(xì)節(jié)
垃圾回收的任務(wù):跟蹤并監(jiān)控每個(gè)java對(duì)象,當(dāng)不可達(dá),回收內(nèi)存;清理內(nèi)存分配的時(shí)候產(chǎn)生的內(nèi)存碎片。
垃圾回收算法:
執(zhí)行方式:
(1)串行執(zhí)行和并行執(zhí)行
(2)并發(fā)執(zhí)行和應(yīng)用程序停止
回收內(nèi)存方式:(目的是回收不可達(dá)對(duì)象)
(1)復(fù)制:搜索全部A可達(dá)對(duì)象,然后直接全部復(fù)制到B,再把A回收
(2)標(biāo)記清除:掃描一遍標(biāo)記A那些可達(dá)的,再掃描一遍回收那些不可達(dá)的
(3)標(biāo)記壓縮:掃描一遍標(biāo)記A那些可達(dá)的,再壓縮把可達(dá)對(duì)象湊一塊,然后再一起回收不可達(dá)的。
引用分類
(1)強(qiáng)引用:處于可達(dá)狀態(tài),不可能回收;
(2)軟引用:SoftReference當(dāng)系統(tǒng)空間不足時(shí),有可能被回收
(3)弱引用:WeakReference生命期更短,更弱
(4)虛引用:PhantomReference不能單獨(dú)使用,用于跟蹤對(duì)象被垃圾回收的狀態(tài)
隔代回收機(jī)制
young代:復(fù)制算法遍歷處于可達(dá)的對(duì)象,對(duì)象少,復(fù)制成本不大。
old代:young代多次掃描后留下的移動(dòng)到old代,采用標(biāo)記壓縮算法
permanent代:不會(huì)被回收,用于裝載class類信息(個(gè)人理解就是棧空間outofMermeryError: Perm Gen space)
垃圾回收附加選項(xiàng)
-Xmx:設(shè)置jvm堆內(nèi)存最大容量
-Xms:設(shè)置jvm堆內(nèi)存初始容量
-XX:PermSize:設(shè)置Permanent代默認(rèn)容量
-XX:MaxPermSize:設(shè)置Permanent代最大容量
內(nèi)存管理技巧
(1)盡量使用直接量
(2)使用StringBuilder和StringBuffer進(jìn)行字符串連接
(3)盡早釋放無用對(duì)象的引用
(4)盡早釋放靜態(tài)變量
(5)避免在經(jīng)常調(diào)用的方法和循環(huán)中創(chuàng)建java對(duì)象
(6)緩存經(jīng)常使用的對(duì)象
(7)盡量不要使用finalize方法
(8)考慮使用SoftReference
總結(jié)
以上是生活随笔為你收集整理的物品回收平台java代码_java垃圾回收的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 同步方式 lock_java的
- 下一篇: 蓝桥杯java最小公倍数_蓝桥杯算法训练