2013-02-05 31 views
8

thể trùng lặp:
When Shutdown Hooks Break Badlà Shutdownhook đảm bảo được thực hiện nếu JVM treo

Tôi muốn biết nếu shutdownhook được đảm bảo để thực hiện trong kịch bản nếu JVM treo.

+0

Có vẻ như thậm chí không đọc javadoc… –

+2

Vâng, nếu bạn tắt máy ví dụ, nó được đảm bảo rằng không có gì là xảy ra nữa. Kết luận: JVM không thể kiểm soát thế giới bên ngoài JVM. –

+0

Bạn có nghĩa là một sự cố JVM? Không. Nếu bạn có nghĩa là tắt máy sau khi Ngoại lệ, thì chúng sẽ chạy. Hầu hết thời gian khi mọi người nói về một vụ tai nạn JVM họ có nghĩa là chương trình của họ đã ném một ngoại lệ hoặc một lỗi. –

Trả lời

11

Không. Từ the docs:

Trong trường hợp hiếm hoi, máy ảo có thể hủy, nghĩa là, ngừng chạy mà không tắt máy sạch. Điều này xảy ra khi máy ảo bị chấm dứt bên ngoài, ví dụ với tín hiệu SIGKILL trên Unix hoặc cuộc gọi TerminateProcess trên Microsoft Windows. Máy ảo cũng có thể hủy bỏ nếu một phương thức nguyên bản bị hỏng, ví dụ, làm hỏng cấu trúc dữ liệu nội bộ hoặc cố gắng truy cập bộ nhớ không tồn tại. Nếu máy ảo hủy bỏ sau đó không có bảo đảm có thể được thực hiện về việc có hay không bất kỳ móc tắt máy nào sẽ được chạy.

(tôi nhấn mạnh)

1

shutdownhook tuy nhiên tạo ra một thread cho bất cứ điều gì nhiệm vụ cần phải làm trước khi JVM bắt đầu tắt máy và nếu bản thân máy bị shutdown thread được tạo ra bởi shutdownhook
sẽ không bao giờ có được CPU chu kỳ cho có thực hiện và tôi nghĩ ở đây các shutdownhook sẽ không được thực hiện ...

+0

Bạn đã hỏi điều gì sẽ xảy ra nếu JVM gặp sự cố, không phải điều gì sẽ xảy ra nếu máy tính bị tắt cưỡng bức. Trong trường hợp thứ hai, tôi nghĩ rằng nó là trực giác rõ ràng rằng không có gì (thậm chí không tắt móc) sẽ được thực hiện sau khi quyền lực được gỡ bỏ. – nneonneo

+0

xin cảm ơn !! tôi đã chỉ làm việc trên các kịch bản có thể có của JVM bị rơi .. –

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