GC處理的只是堆內(nèi)存的資源吧,屏幕資源還是要你自己釋放的,寫在你自己的finalize方法里。所以object提供了finalize方法以供復(fù)寫,類似于C++的析構(gòu)吧。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了江津免費(fèi)建站歡迎大家使用!
gc()只不過會(huì)向JVM發(fā)出這樣一個(gè)申請(qǐng)
雖然系統(tǒng)并不一定會(huì)調(diào)用垃圾收集,但在某些情況下還是有意義的。
比如即將開辟大量?jī)?nèi)存之前使用手動(dòng)請(qǐng)求gc,可能會(huì)比等系統(tǒng)自動(dòng)調(diào)用gc來說讓用戶的感覺更加流暢。
不用手動(dòng)調(diào),即使你是搞內(nèi)存型程序,你在調(diào)用gc時(shí)jvm也會(huì)有它的調(diào)度規(guī)則,不是你一調(diào)用就開始回收垃圾,所以在編程時(shí)注意釋放沒用的資源,尤其是在線程中,因?yàn)榫€程沒結(jié)束有些資源是無(wú)法釋放的。
沒聽說過有命令行能讓一個(gè)正在運(yùn)行的程序 gc 的,但 jdk 自帶了 jconsole 能連接到本地的?JVM?進(jìn)程,然后從它的?JMX?方法中找?vm?的?gc?方法。都有界面的,你只需要先連接成功本地的?jvm?進(jìn)程就可以了。
Java的公有API可以主動(dòng)調(diào)用GC的有兩種辦法,一個(gè)是
System.gc();
// 或者下面,兩者等價(jià)
Runtime.getRuntime().gc();
還有一個(gè)是JMX:
java.lang.management.MemoryMXBean.gc()
作用跟System.gc()也是類似的。
MemoryMXBean.gc()和System.gc()的內(nèi)部實(shí)現(xiàn)都是Runtime.getRuntime().gc(),從效果上說兩者一模一樣沒有區(qū)別。
程序員是無(wú)法讓System.gc();按照規(guī)則調(diào)用的,你可以在程序啟動(dòng)過程中寫上這段代碼,不過至于什么時(shí)候調(diào)用就要看JVM了.
不過,覺得你的程序或許應(yīng)該有地方資源泄漏了吧,假如你的機(jī)器是2G內(nèi)存,一般運(yùn)行WindowsXP,大概也就用1/4內(nèi)存,再加上的JVM,1G應(yīng)該搞定了,剩下的1G,你用來加載信息,個(gè)人覺得,如果啟動(dòng)就死是不太可能的,如果運(yùn)行一段時(shí)間,程序?qū)懙牟煌晟瓶赡軙?huì)死掉,個(gè)人建議你還是好好看看自己的程序吧,如果確認(rèn)程序沒問題,那就只有加內(nèi)存了,沒有別的辦法,光靠JVM的垃圾回收,效果不是很多.