簡體   English   中英

資源泄漏到底是什么?

[英]What exactly are resource leaks?

我聽過很多人使用“資源泄漏”一詞。 我確信這是一種全球現象,盡管出於回答的目的,我將堅持使用Java。 以下面的代碼為例:

public void append(String text) throws IOException
{
    BufferedWriter buffWriter = new BufferedWriter(new FileWriter("tf2rocks.imnotkidding", true));
    buffWriter.write(event);
    buffWriter.close();
}

在上面的代碼片段中,存在資源泄漏,就好像write()拋出IOException ,永遠不會調用close()

現在我的問題是:資源泄漏到底是什么? 他們怎么會對我造成傷害?

如果每個Java程序都在封閉的環境中在其自己的JVM實例中執行,那么這些“資源泄漏”究竟如何對我造成危害? 其他惡意程序是否有可能利用此優勢?

實現java.io.Closeable (自JDK 1.5起)和java.lang.AutoCloseable (自JDK 1.7起)的類被視為代表外部資源,當不再需要它們時,應使用close()方法關閉它們。 所有操作系統對套接字,文件句柄等的數量都有限制。 可以在特定時間打開。 如果不關閉資源,則不必保持它們打開狀態;如果繼續保持打開狀態,而沒有關閉它們,那么一段時間后,操作系統將無法分配更多資源。

你的例子是對的。 從OS角度考慮,您具有可以創建的預定義文件/套接字句柄,即可以一次打開多個文件。 現在,如果您繼續打開多個文件,則可能會超出可打開的文件數量。

因此,盡管有其JVM,但沒有操作系統的幫助,僅憑JVM就無法運行。 文件處理程序/描述符只是示例之一。

如果是內存,則不必擔心,因為它將由GC自動處理,但GC不會占用資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM