2010-09-29 24 views
8

Tôi có một chương trình đôi khi ném OOME, Tôi hiểu rằng có một cờ trong các tùy chọn JVM mà tôi có thể đặt và bất cứ khi nào một Lỗi/Ngoại lệ xuất hiện (chẳng hạn như OOME), nó gọi một tập lệnh mà tôi đã viết. Kịch bản sẽ cung cấp cho người dùng một thông báo và sẽ gọi một chương trình với một đối số khác để nó không nhận được OOME lần nữa.làm thế nào để bắt OutOfMemoryError trong JVM và chạy một kịch bản nếu nó bị bắt?

có ai biết cách đặt cờ này không? các tùy chọn JVM tôi cần thiết lập là gì? Tôi nhìn khắp mọi nơi trên đường dây và không thể tìm thấy câu trả lời.

hãy giúp tôi! Cảm ơn, Aye

+1

nhập 'java -X' tại dấu nhắc lệnh. Bạn sẽ nhận được một danh sách tất cả các tùy chọn mở rộng. Có thể giúp. –

Trả lời

-3

Tôi tìm thấy một gợi ý trong một forum: bắt OOME trong ứng dụng của bạn (như trực tiếp trong chính, giả sử bạn là một luồng duy nhất) và thực hiện điều này trong trình xử lý bắt:

catch (OutOfMemoryError not_again) { 
    System.gc(); 
    System.runFinalization(); 
    System.gc(); 
    System.out.println("Your error message"); 
} 

Dọn dẹp bộ nhớ có thể giải phóng đủ bộ nhớ để tạo ra một lỗi cuối cùng e trước khi chết.

+0

cảm ơn, nhưng ứng dụng rất thưa thớt và tôi không muốn nắm bắt nó bên trong Tôi thích gọi tệp .dat từ chính JVM – Aye

+8

người ta sẽ nghĩ rằng JVM sẽ thử một vài vòng GC trước khi ném một OOME chính nó; điều này không đảm bảo thực sự làm được gì nhiều. –

Các vấn đề liên quan