2009-09-29 43 views

Trả lời

82

sử dụng đối số -Xms<memory>-Xmx<memory>. Sử dụng M hoặc G sau các số cho biết Megs và Gigs của byte tương ứng. -Xms cho biết mức tối thiểu và -Xmx mức tối đa.

+1

bạn có thể muốn xem xét MaxPermSize là tốt. – pmu

+54

anh ta hỏi về bộ nhớ JVM. Những gì bạn đã nói là kích thước heap. Cả hai đều khác nhau – vsingh

+6

Để lặp lại những gì các nhận xét khác đề cập, Xms và Xmx chỉ định cấu hình vùng lưu trữ.Mặc dù cấu hình các biến này có ảnh hưởng gián tiếp đến không gian heap, người hỏi câu hỏi đang cố thiết lập nếu có cách cấu hình tổng dung lượng bộ nhớ (heap + non-heap) – murungu

26

Bạn không cần phải lo lắng về bộ nhớ rò rỉ ngăn xếp (điều này rất không phổ biến). Thời gian duy nhất bạn có thể có ngăn xếp có được ra khỏi tầm kiểm soát là với vô hạn (hoặc thực sự sâu) đệ quy.

Đây chỉ là đống. Xin lỗi, ban đầu không đọc câu hỏi của bạn.

Bạn cần chạy JVM với đối số dòng lệnh sau.

-Xmx<ammount of memory> 

Ví dụ:

-Xmx1024m 

Điều đó sẽ cho phép tối đa là 1GB bộ nhớ cho JVM.

+0

Điều đó không đúng, theo chủ đề này, có nhiều cách bạn có thể bị rò rỉ bên ngoài đống http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa

+0

Bạn là chính xác, có rất nhiều cách để có vấn đề bộ nhớ không liên quan đến ngăn xếp. Tuy nhiên, chúng không phải là rất phổ biến. – jjnguy

+5

Chắc chắn bạn không thể kiểm soát kích thước bộ nhớ không phải heap, có thể không? –

9

Câu trả lời ở trên là loại chính xác, bạn không thể kiểm soát một cách duyên dáng bao nhiêu bộ nhớ riêng mà một quá trình java phân bổ. Nó phụ thuộc vào những gì ứng dụng của bạn đang làm.

Điều đó nói rằng, tùy thuộc vào nền tảng, bạn có thể sử dụng một số cơ chế, ví dụ: để hạn chế kích thước của java hoặc bất kỳ quy trình nào khác.

Chỉ cần không mong đợi nó không thành công nếu nó đạt đến giới hạn đó. Lỗi phân bổ bộ nhớ riêng khó xử lý hơn so với lỗi phân bổ trên vùng heap java. Có một cơ hội khá tốt, ứng dụng sẽ gặp sự cố nhưng tùy thuộc vào mức độ nghiêm trọng của hệ thống để giữ cho quy trình xử lý có thể vẫn phù hợp với bạn.

2

Các NativeHeap có thể được increasded bởi -XX: MaxDirectMemorySize = 256M (mặc định là 128)

Tôi chưa bao giờ sử dụng nó. Có thể bạn sẽ thấy nó hữu ích.

+1

Tôi nghi ngờ rằng op muốn điều này: bộ nhớ riêng được sử dụng khi bạn thực hiện cuộc gọi đến mã C/C++ từ java. –

+4

bộ nhớ riêng cũng được sử dụng khi thực hiện cuộc gọi nio nếu bạn cấp phát bộ đệm với bộ nhớ trực tiếp. (... và trình nạp lớp và thông tin về chuỗi ....) – stu

10

Nếu bạn muốn giới hạn bộ nhớ cho JVM (không phải là kích thước heap) ulimit -v

Để có được một ý tưởng về sự khác biệt giữa JVM và bộ nhớ heap, hãy xem bài viết tuyệt vời này http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

+6

Có phải lệnh 'ulimit' là Linux không? Tôi đã tìm kiếm nhanh trên Google và không thấy bất kỳ mối quan hệ nào giữa 'ulimit' và JVM. Y – Sam

+0

Vâng, đó là lệnh linux. http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh

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