質問
下記のコードを作成しました(既存のExcelファイルを開き、値を読み取るプログラム)。
プログラム自体は正常に終了するのですが、気になったのがfinally句に良く記述する「オブジェクト破棄コード」です。例示しているソースコードのコメントにも記述していますが、
Java
1 } finally { 2 // GC対象外オブジェクトは存在しないので、原則オブジェクト破棄コードは不要(下記のようなコードは不要) 3 // if(excel != null ) excel = null; 4 // if(sheet != null ) sheet = null; 5 }
上記の認識であっておりますでしょうか?
C#ですと、リソースの破棄ーC#によるプログラミング
メモリは .NET Framework の「ガーベジコレクション」機能が自動的に管理していて、 プログラマが明示的に破棄してやる必要はないのですが、 ファイルなどは「ガーベジコレクション」の管理対象外で、 明示的な破棄が必要です。
とのことですので、ファイル関係オブジェクトはその破棄コードが必要だと思いますが、Javaはそのような破棄コードは不要と考えてよろしいでしょうか?
<ソースコードサンプル>
Java
1 try{ 2 //Excelファイル オープン 3 Workbook excel = WorkbookFactory.create(new File(inputPath.toString())); 4 5 //シート オープン 6 Sheet sheet = excel.getSheet(settings.getProperty("SheetName")); 7 ・ 8 ・ 9 ・ 10 11 } 12 }catch(Exception e){ 13 System.err.println("ファイル読込み失敗:" + e.toString()); 14 } finally { 15 // GC対象外オブジェクトは存在しないので、原則オブジェクト破棄コードは不要(下記のようなコードは不要) 16 // if(excel != null ) excel = null; 17 // if(sheet != null ) sheet = null; 18 }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/11 04:01
2022/11/11 09:00 編集
2022/11/11 11:08