Khi máy ảo Erlang chạy trong tình trạng thiếu bộ nhớ, nó chỉ đơn giản là treo toàn bộ máy ảo. Lý do là nó là điều đơn giản và an toàn nhất để làm.
Nếu bạn muốn có hệ thống chịu lỗi, bạn phải có nhiều máy tính. Bạn không thể thực hiện một hệ thống khoan dung lỗi chỉ với một máy tính (đơn vị tính toán tự trị chính xác). Vì vậy, nếu ứng dụng của bạn chạy trong một tình huống out-of-memory điều đơn giản nhất là để cho toàn bộ VM sụp đổ. Bạn có một lỗi trong hệ thống của bạn anyway.
Xử lý tất cả các trường hợp cạnh - bộ nhớ ngoài mà bạn có thể xử lý và trường hợp nào bạn không thể - quá phức tạp và dễ xảy ra lỗi. Giết chết quá trình vi phạm không phải là giải pháp. Đầu tiên, đó là quá trình vi phạm rất khó để quyết định. Giết chết một số quá trình "ngẫu nhiên" (heuristically decided) không phải là một giải pháp vì quá trình này bị giết bởi heuristic có thể là quá trình chịu trách nhiệm cho việc phục hồi một cách tình cờ. Giết toàn bộ VM không chỉ là giải pháp đơn giản nhất mà còn là giải pháp hợp lý duy nhất cho một tình huống ngoài bộ nhớ.
Cách thức thực hiện bằng hầu hết các ngôn ngữ hoặc hệ điều hành phổ biến hiện đại chắc chắn là sai trong các trường hợp bạn cần hệ thống đáng tin cậy. Nó có thể được chấp nhận cho máy tính để bàn hoặc yêu cầu ít nghiêm ngặt hơn nhưng hoàn toàn không thể chấp nhận cho các hệ thống mà Erlang được thiết kế cho.
Nguồn
2012-06-20 07:43:52
Xem thêm: [Tại sao Erlang gặp phải các chuỗi lớn?] (Http://stackoverflow.com/questions/192725/why-is-erlang-crashing-on-large-sequences) –