Как создать дамп потока на Java
Ошибка нехватки памяти?
Ваш вопрос можно упростить до:
и
- как отловить ошибку нехватки памяти (не обращайте внимания на скептиков, здесь отсутствует общая картина, см. Мой комментарий)
Так что на самом деле это довольно просто, вы можете сделать это так:
установить обработчик необработанных исключений по умолчанию
при обнаружении необработанного исключения проверьте наличие ошибки OutOfMemoryError
если у вас есть OutOfMemoryError, создайте себе полный дамп потока и либо попросите пользователя отправить его вам по электронной почте, либо предложите отправить его автоматически
Бонус: на 1.5 тоже отлично работает:)
Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
public void uncaughtException( final Thread t, final Throwable e ) {
...
}
Вы можете посмотреть на это:
e.getMessage();
и это:
Thread.getAllStackTraces();
Я делаю это все время в приложении, которое поставляется на сотнях разных 1.5 и 1.6 JVM (на разных ОС).