Я пытаюсь понять, как отказ от вызова close () для каких-либо потоков может повлиять на производительность и функциональность системы. Для этого я создал тестовый класс ниже.
public static void main(String[] args) throws Exception {
int loopCount = 1000000;
for (int i = 0; i < loopCount; i++) {
PrintWriter writer = new PrintWriter("C:/files/the-file-name" + i +".txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
FileInputStream is = new FileInputStream("C:/files/the-file-name" + i +".txt");
}
}
Я наблюдал за этой программой с помощью VisialVM. Я мог видеть, что сборщик мусора работает правильно. Никаких утечек памяти, как ожидалось.
НО Тогда я подумал, что, по крайней мере, я должен увидеть некоторые исключения, потому что я в основном исчерпываю доступные файловые дескрипторы, доступные моему процессу java. Почему здесь нет исключения? Программа продолжает работать!
Другая проблема заключается в том, что хотя у меня есть FileInputStream для каждого нового созданного файла, если я пойду и попытаюсь удалить какой-либо из файлов, на стороне ОС не будет блокировки, чтобы помешать мне.
Может ли кто-нибудь объяснить, действителен ли мой тест или нет? И объясните, пожалуйста, об утечке ресурсов в случае невозможности вызова закрытия на каких-либо потоках.
ArrayList
и посмотрите, не изменится ли ваша производительность. - person CollinD   schedule 30.01.2017