ファイル読み込みや書き込み操作時のclose()処理について質問です。

1. ------------------------------------------------------------------------------------------------

FileInputStream fis = new FileInputStream(new File("Input.txt"));
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
while (br.ready()) {
System.out.println(br.readLine());
}
br.close();
isr.close();
fis.close();

2. ------------------------------------------------------------------------------------------------

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Input.txt"))));
while (br.ready()) {
System.out.println(br.readLine());
}
br.close();


1.の場合、FileInputStreamもInputStreamReaderもBufferedReaderもclose()処理を入れていますが、
2.のケースですとBufferedReaderのみのclose()処理があります。

個々のインスタンスを作らずにBufferedReaderのコンストラクタの引数に直接new InputStreamReaderやnew FileInputStreamなどを指定する場合、
これに対してのclose()処理はJVMが自動で行なってくれるのでしょうか。
また、それによってメモリの使用状況なども変わってくるのでしょうか。

そこまで大したものを作るわけではないのですが、少し疑問に思ったので質問させていただきました。