叶予清晨

叶予清晨

hhh

javaリソース管理

Java のリソース#

  1. メモリリソース:オブジェクト、配列などが占有するメモリ空間
  2. 物理リソース:ファイルハンドル、データベース接続、ネットワーク接続など
  3. メモリと物理リソースの違い
  • メモリリソースはJVMによって自動管理され、物理リソースは手動管理が必要
  • オブジェクトが参照されなくなると、メモリリソースは自動的に回収され、メモリリソースが解放されるが、物理リソースは依然として占有される
  • 例:メモリリソース:読書エリアで本を読み、読み終わったらそのまま去る;物理リソース:本を借りるには積極的に返却する必要があり、返さなければ本を占有し続ける

Java のメモリ管理の基本原理#

  1. ヒープメモリ:オブジェクトインスタンスを格納
  2. スタックメモリ:基本データ型とオブジェクト参照を格納

Java の物理リソース管理における try-with-resources の動作原理#

これはJava 7で導入された機能です
AutoCloseableインターフェースを実装した任意のクラスが使用できます
コンパイラは自動的にfinallyを持つコードに変換します

// このようなコードを書くと:
try (FileInputStream file = new FileInputStream("test.txt")) {
    // ファイルを使用
}

// コンパイラは自動的にこのようなコードに変換します:
FileInputStream file = new FileInputStream("test.txt");
try {
    // ファイルを使用
} finally {
    if (file != null) {
        file.close();
    }
}

Java で物理リソースを管理する方法#

  1. 従来の方法(推奨しない)
FileInputStream file = null;
try {
    file = new FileInputStream("test.txt");
    // ファイルを使用
} catch (Exception e) {
    // 例外処理
} finally {
    if (file != null) {
        file.close(); // リソースを手動で閉じる
    }
}
  1. 現代の方法(推奨)
try (FileInputStream file = new FileInputStream("test.txt")) {
    // ファイルを使用
} catch (Exception e) {
    // 例外処理
} // リソースを自動で閉じる
  1. Java リソース管理の完全なまとめ:

核心原則:
try-with-resources を使用してリソースを自動管理する
チェック例外を正しく処理する
「後入れ先出し」のリソースクローズ順序に従う

リソースタイプ:
管理が必要な一般的なリソース

  • InputStream/OutputStream (ファイル操作)
  • Connection/Statement/ResultSet (データベース操作)   
  • Socket (ネットワーク接続)
  • Channel (NIO 操作)

標準テンプレート:

try (Resource1 r1 = new Resource1();    
     Resource2 r2 = new Resource2()) {
    // リソースを使用
} catch (Exception e) {
    // 例外処理
}

Java リソース管理の方法:#

  1. ファイルシステムリソース:
  • File クラスを使用
    File file = new File("test.txt");

  • Path インターフェースを使用(Java 7+)
    Path path = Paths.get("test.txt");

  1. ネットワークリソース:
  • URL クラスを使用
    URL url = new URL("https://example.com");
    URLConnection conn = url.openConnection(); 

  • Socket を使用
    Socket socket = new Socket("localhost", 8080);

  1. クラスパスリソース:
  • ClassLoader を使用
    InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties");

  • Class を使用
    InputStream is = MyClass.class.getResourceAsStream("/config.properties");

  1. データベースリソース:
  • JDBC を使用
    Connection conn = DriverManager.getConnection(url, username, password); 
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。