我正在使用Java的保存和加載文件的應用程序,所以我使用的是流。我從文件中獲取流,然後使用此流在另一個文件夾中創建一個新文件。問題是,在使用流並關閉它之後,應該釋放的內存仍然存在。InputStream發生內存泄漏?
例如,我加載100MB的文件(任務管理器顯示,在100MB的java.exe增加),那麼我將文件保存在另一個文件夾,並用stream.close關閉流()。但是,java.exe不會減少100MB。當我多次保存和加載文件,並且java.exe超過600MB時,它會減少到300 MB。每次它將超過600mb,它會減少到300mb。爲什麼是這樣?爲什麼當我調用stream.close()時,內存不能達到0mb?爲什麼它在600mb的時候釋放內存,並沒有釋放所有的內存?
這是我從路徑字符串加載一個流,然後關閉流:
String path = ... //File path
InputStream stream = new BufferedInputStream(new FileInputStream(path));
stream.close();
感謝您的答覆。
如果您決定使用該內存,您可能會簡單地將其釋放以供您使用,這意味着「過度」使用是無關緊要的。垃圾收集並不總是立即發生;請參閱http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html –
向操作系統釋放內存非常昂貴。 –
我的印象是,Java只會很少釋放內存給操作系統 - 絕對不是在小規模的收藏期間。這是基於這樣的假設:大多數需要一定量X內存的軟件遲早會需要它。 – millimoose