Я записал программу Java, которая должна обработать тысячи текстовых файлов (все потребности, которые будут загружены на памяти). Это хорошо работает с целых 123 входными файлами, но когда я выполняю его для обработки приблизительно 5 000 файлов, это неожиданно завершается посреди дороги, не давая сообщения об ошибке / исключение. Кто-либо может дать мне ключ к разгадке то, что, возможно, пошло не так, как надо?
Я использую jdk1.6 на Leopard Mac OS, имеющем 2 ГБ RAM.
Учитывая, что это ваша программа, я предлагаю вам сделать следующее:
Сначала измените метод main
, чтобы все делается в блоке try / catch, который сообщает обо всех неперехваченных исключениях; например что-то вроде этого:
public static void main(String[] arghhhhh) {
try {
...
} catch (Throwable ex) {
System.err.println("Uncaught exception - " + ex.getMessage());
ex.printStackTrace(System.err);
}
}
Во-вторых, ищите где угодно, где можно «раздавить» неожиданные исключения, перехватывая их и не сообщая о них.
В-третьих, ищите место, где можно было бы беззвучно вызвать System.exit ()
. Это может произойти и в библиотеках ... если вы используете плохо написанный.
Если эти меры не дают вам ответов, попробуйте выяснить, КАК приложение завершается, к
Проверьте, есть ли у вас блоки try / catch, которые не регистрируют исключения должным образом.
Скорее всего, это ошибка OutofmemoryError. Убедитесь, что консоль не перенаправлена.
Похоже, вы получаете OutmoryError
.
если это так, попробуйте увеличить объем кучи памяти.
java -Xms<initial heap size> -Xmx<maximum heap size>
Вы открываете файлы одновременно? Если вы загружаете слишком много файлов одновременно, вам может не хватить памяти. Если файлы достаточно велики, возможно, у вас заканчивается память при открытом только одном файле. Кроме того, убедитесь, что вы закрываете файлы, когда закончите с ними.