2012-05-15 35 views
6

Tôi sắp triển khai một ứng dụng đến một máy chủ trực tiếp và ngay bây giờ tôi đang ở phần mà tôi phải đặt kích thước heap và permgen cho jvm. Tôi đã thấy rất nhiều bài báo và tất cả đều nói "đặt kích thước heap tối thiểu thành (một số)" và "đặt kích thước heap tối đa thành (một số)", nhưng không có bài viết nào thực sự nói lý do kích thước heap tối thiểu cần phải được thiết lập. Tôi hiểu lý do để đặt kích thước heap tối đa, nhưng không phải về mức tối thiểu. Tôi sẽ biết ơn nếu bạn làm sáng tỏ điều này.Tôi có thực sự cần phải xác định kích thước heap java tối thiểu

+0

Vậy tại sao bạn đặt giới hạn dưới cho bất kỳ thứ gì? Bởi vì chương trình của bạn có thể yêu cầu một số tiền nhất định. Tôi có hiểu nhầm câu hỏi không? Bạn có nghĩa là thiết lập min là thực sự cần thiết? – keyser

+2

có thể trùng lặp với [Lý do thiết lập Kích thước Heap Java tối thiểu là gì?] (Http://stackoverflow.com/questions/8085949/whats-the-reason-to-set-a-minimal-java-heap-size) – assylias

Trả lời

6

Vùng heap trong Java là vùng phân bổ bộ nhớ chung. Giả sử chúng ta thiết lập kích thước heap tối thiểu là 1000 byte (đây là một số thấp vô lý). Bây giờ cho phép nói rằng tôi khởi tạo một đối tượng trong chương trình của tôi có chứa một số văn bản dài hai nghìn ký tự. Tôi không thể lưu đối tượng này mà không mở rộng kích thước heap đầu tiên của tôi. Bây giờ, có lẽ tham số heap tối đa của tôi đủ lớn để cho phép điều này - nhưng đó là lý do để thiết lập kích thước heap tối đa.

Tuy nhiên, giả sử máy chủ của tôi có 4G ram và tôi đặt kích thước heap tối thiểu cho điều đó. (Một số lượng lớn vô lý.) Nếu không có chương trình nào khác chiếm bất kỳ bộ nhớ nào, điều này sẽ hoạt động. Tuy nhiên, nếu tôi bắt đầu một quá trình thứ hai với chương trình java của tôi, nó sẽ không thể phân bổ đủ bộ nhớ và thoát.

Kích thước tối thiểu thực hiện hai điều cho bạn; đầu tiên, nó làm cho bộ nhớ có sẵn một cách nhanh chóng để cho phép khởi động nhanh. Thứ hai, nó cho phép bạn điều chỉnh jvm của bạn để bạn có một số bất biến, cho phép bạn đưa ra dự đoán về có bao nhiêu tiến trình bạn có thể chạy. Nếu kích thước heap tối thiểu của bạn quá lớn, bạn có thể lãng phí bộ nhớ trên một quá trình mà không bao giờ cần nhiều, hạn chế dung lượng của hệ thống của bạn. Nếu bạn đặt quá nhỏ, các chương trình sẽ mất nhiều thời gian để khởi động, ảnh hưởng xấu đến hiệu suất của quá trình.

1

Đặt kích thước heap tối thiểu cho phép Java phân bổ một số bộ nhớ lên phía trước giúp cải thiện thời gian khởi động.

1

Đặt kích thước tối thiểu một cách rõ ràng (phía trên mặc định) giúp phân mảnh phân bổ ở cấp hệ điều hành và khởi động hiệu suất thời gian.

Vùng heap Java được hỗ trợ bởi bộ nhớ được cấp bởi hệ điều hành, khối ban đầu càng ít phân bổ lại và phân mảnh sẽ xảy ra.

Đặt mức tối thiểu bằng hoặc gần bằng mức tối đa, sẽ loại bỏ hoàn toàn các tình huống này.

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