JAVA的File類中的 renameTo, delete 等方法,都是些不靠譜的方法,操做失敗是常事。他們都有一個布爾的返回值,使用他們時要格外當心。java
當file被佔用時,這些方法就會返回false,即便很規矩的 in.close;out.close; 仍然會false,這個非常讓人頭疼。爲此,只好繞道而行,好比,當前程序先記錄下要操做的文件,再開一個程序去作操做,爲得是file不被佔用。這幾天,也是遇到了這個問題,renameTo對一個文件夾中的文件重命名,一部分操做成功,一部分失敗,並且老是那幾個文件會失敗。開始的時候,想到的是讓流變量=null,這樣讓流失去對文件的引用(因爲使用的是BufferedImage 沒有close方法),但無濟於事。在網上查了查,沒有好的解決方法,這是上週的事了,而後週一來上班,打開IDE,剛看到這段代碼,忽然想到用gc,固然gc這個東西也不是靠譜的,程序員也只有通知的權力,僅此而已,執不執行,看他心情。程序員
System.gc(); file.renameTo("xxxx");
還別說,果真好用了。code
null與gc內存
前幾天在看OC,而後吐槽OC裏那個引用計數,感受java有gc要好用的多,而今天就碰壁了。null就是放棄了引用權,等待gc的回收,可gc的回收並不是即便的,在這期間,可能時間極短,但仍是可能出現問題。而引用計數能夠手動釋放內存,主動性強,要比智能的gc更適用。class
惋惜JAVA沒有引用計數這類的手動機制,因此只能用gc,在這種狀況下,gc是否100%有用,還有待驗證。變量