2012-01-05 30 views
7

Về cơ bản, chúng tôi nhận thấy rằng trên một số máy tính, thiết lập tùy chọn JVM -Xmx (kích thước heap tối đa) đôi khi khiến JVM không khởi tạo được, ngay cả khi có nhiều RAM hơn trên hệ thống.Tại sao cài đặt -Xmx quá cao đôi khi khiến JVM thất bại, ngay cả khi RAM có sẵn?

Ví dụ: trên máy 4gb, chúng tôi có -Xmx1024m không hoạt động nhưng -Xmx800m hoạt động. Tôi có thể hiểu trên một máy 1gb, ngay cả một máy 2gb, nhưng trên một máy tính 4GB, đặc biệt là xem xét rằng Windows, Linux, vv có thể trao đổi RAM ra, tại sao điều này không?

Tôi đã nhìn thấy rất nhiều chủ đề và câu hỏi để giảm kích thước tối đa của bạn, nhưng không ai có thể giải thích lý do tại sao nó không thành công mà tôi thực sự đang tìm kiếm.

Đồng thời, làm thế nào để bạn nói tiêu thụ nhiều bộ nhớ như bạn muốn lên đến một kích thước nhất định?

+0

Tìm kiếm nhanh mang đến cho người dùng những người ngạc nhiên rằng JVM cho phép họ thiết lập '-Xmx' thành terabyte mặc dù họ không có nhiều không gian hoán đổi. Bạn có thể vui lòng chia sẻ các lệnh chính xác và các phiên bản JVM mà bạn đã thử nghiệm không? – alf

+0

@alf, hãy nhớ rằng '-Xmx' đặt kích thước heap tối đa, chỉ đơn giản là kích thước của phạm vi dành riêng cho không gian địa chỉ ảo; chỉ số tiền được chỉ định trong '-Xms' thực sự được hỗ trợ bởi bộ nhớ được cam kết. Ví dụ, xem ['VirtualAlloc'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx) và so sánh' MEM_RESERVE' và 'MEM_COMMIT 'flags. –

+0

@ JeffreyHantin Tôi làm, Jeffrey, tôi làm. Đó là lý do tại sao tôi hỏi những gì _exactly_ OP đã làm. – alf

Trả lời

13

Có thể điều này là do virtual address space fragmentation. Không thể đặt trước một dải địa chỉ liền kề 1024MB cho kích thước tối đa tiềm năng của heap, tùy thuộc vào địa chỉ tải của DLL, vị trí ngăn xếp của chủ đề, phân bổ bộ nhớ riêng bất động, địa chỉ dành riêng cho hạt nhân, v.v. một quy trình 32 bit.

1

I came across this issue a while ago with Windows XP. Một trong những máy XP nhất tôi có thể phân bổ 1400MB, trong khi những máy khác chỉ có 1200MB. Sự đồng thuận là sự phân mảnh như Jeffrey Hantin nói trong câu trả lời khác.

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