Bất cứ ai cũng có thể giải thích cho tôi tại sao các JVM (tôi đã không kiểm tra quá nhiều, nhưng tôi chưa bao giờ thấy một JVM nào làm như vậy) cần phải chạy trên một kích thước heap cố định? Tôi biết việc thực hiện trên một đống liền kề đơn giản dễ dàng hơn, nhưng Sun JVM hiện đã hơn một thập kỷ, vì vậy tôi hy vọng họ đã có thời gian để cải thiện điều này.
Cần xác định kích thước bộ nhớ tối đa của chương trình của bạn khi khởi động dường như là một việc cần làm trong những năm 1960, và sau đó có những tương tác xấu với quản lý bộ nhớ ảo OS (lấy ra dữ liệu đã hoán đổi, không thể xác định được quá trình bộ nhớ của Java là bao nhiêu thực sự sử dụng từ phía hệ điều hành, một lượng lớn dung lượng VM bị lãng phí (tôi biết, bạn không quan tâm đến các máy 48 bit ưa thích của mình ...)). Tôi cũng đoán rằng những nỗ lực đáng buồn khác nhau để xây dựng các hệ điều hành nhỏ bên trong JVM (máy chủ ứng dụng EE, OSGi) ít nhất là một phần để đổ lỗi cho tình huống này, bởi vì việc chạy nhiều quy trình Java trên một hệ thống luôn dẫn đến lãng phí tài nguyên vì bạn phải cung cấp cho mỗi người trong số họ bộ nhớ có thể phải sử dụng lúc cao điểm.
Đáng ngạc nhiên, Google đã không mang lại những cơn bão phẫn nộ về điều này mà tôi mong đợi, nhưng họ có thể đã bị chôn vùi dưới hàng triệu người tìm hiểu về kích thước đống cố định và thực tế là chấp nhận nó.