2011-01-07 28 views
12

Tôi có một ứng dụng tạm thời cần một số lượng bộ nhớ/heap nhất định cho một số quy trình. Với một giá trị hợp lý của kích thước heap tối đa cho JVM như một tùy chọn, JVM bắt đầu với một đống nhỏ và yêu cầu nhiều bộ nhớ hơn từ hệ điều hành theo yêu cầu.JVM có trả lại bộ nhớ miễn phí cho hệ điều hành khi không còn cần thiết nữa không?

Câu hỏi của tôi là, nếu bộ nhớ bổ sung đó sẽ được JVM trả lại cho hệ điều hành (ví dụ: đối với các quy trình khác) khi ứng dụng của tôi không còn cần nhiều bộ nhớ nữa. Hiện tại ứng dụng của tôi dường như giữ bộ nhớ đó mãi mãi, ngay cả khi không cần nữa.

+0

Có _no_ "JVM", bạn nên chỉ định triển khai nào bạn quan tâm. – paxdiablo

+0

29 Câu hỏi, chỉ một câu trả lời được chấp nhận duy nhất. Có bài tập về nhà phải làm. Nghiêm túc. –

Trả lời

22

Các JVM không trả lại bộ nhớ cho hệ điều hành, nhưng chỉ rất miễn cưỡng, vì nó có thể cần nó một lần nữa sớm, và nhận được bộ nhớ từ hệ điều hành là một hoạt động tương đối đắt tiền.

Nếu bạn muốn JVM để trả lại bộ nhớ cho hệ điều hành háo hức hơn, bạn có thể sử dụng tuning parameters of the Oracle JVM, cụ thể -XX:MaxHeapFreeRatio-XX:MinHeapFreeRatio

3

Không nhất thiết. Nó phụ thuộc vào JVM bạn sử dụng. Tôi biết một trường hợp, với JVM của IBM. Chúng tôi cũng gặp sự cố với chương trình không giải phóng bộ nhớ, ngay cả khi không cần thiết. Bạn có thể tìm thấy một số thông tin trên IBM's site.

0

Nó phụ thuộc vào phiên bản thực sự và những người thu gom rác được chọn. Tôi thấy rằng java 1.8.0_73 đôi khi phát hành số lượng nhỏ trở lại hệ điều hành theo mặc định. Đây là phiên bản đầu tiên tôi nhớ nhìn thấy nó mà không cần phải điều chỉnh các thông số JVM, nhưng nó có thể áp dụng rất tốt cho những phiên bản trước đó, tôi không biết một phiên bản chính xác.

Trừ khi thông số được điều chỉnh, theo mặc định, nó có khả năng sẽ không giải phóng bất cứ điều gì trừ khi 60-70% heap của bạn không được sử dụng. Dưới đây có thể là sự xem xét hiệu suất - java có danh tiếng chậm, vì vậy theo mặc định, JVM có thể cố gắng giảm thiểu phân bổ từ hệ điều hành và thu gom rác hiệu quả bằng cách giữ nhiều bộ nhớ và làm điều đó ít thường xuyên hơn.

Tôi tự hỏi nếu nó có thể ít keo kiệt với bộ nhớ nếu hệ điều hành có bộ nhớ tương đối ít miễn phí còn lại ..?

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