Làm cách nào để đặt kích thước heap tối thiểu và tối đa của Java thông qua các biến môi trường?


78

Làm cách nào để đặt kích thước heap tối thiểu và tối đa của Java thông qua các biến môi trường?

Tôi biết rằng kích thước heap có thể được đặt khi khởi chạy java, nhưng tôi muốn điều chỉnh điều này thông qua các biến môi trường trên máy chủ của mình.


Câu trả lời được chấp nhận đã lỗi thời và không áp dụng nữa. Tham khảo câu trả lời của @ Gauthier nếu bạn kết thúc ở đây
Cư sĩ

Câu trả lời:


80

Bạn không thể làm điều đó bằng cách sử dụng trực tiếp các biến môi trường. Bạn cần sử dụng tập hợp các tùy chọn "không chuẩn" được chuyển cho lệnh java. Chạy: java -X để biết chi tiết. Các tùy chọn bạn đang tìm là -Xmx và -Xms (đây là kích thước heap "ban đầu", vì vậy có thể là thứ bạn đang tìm kiếm.)

Một số sản phẩm như Ant hoặc Tomcat có thể đi kèm với tập lệnh lô tìm kiếm biến môi trường JAVA_OPTS, nhưng nó không phải là một phần của thời gian chạy Java. Nếu bạn đang sử dụng một trong những sản phẩm đó, bạn có thể đặt biến như:

set JAVA_OPTS="-Xms128m -Xmx256m"  

Bạn cũng có thể thực hiện phương pháp này với dòng lệnh của riêng mình như:

set JAVA_OPTS="-Xms128m -Xmx256m"  
java ${JAVA_OPTS} MyClass

1
Các JAVA_OPTSkỹ thuật cũng được sử dụng bởi các kịch bản được tạo ra bởi các plugin appassemble maven.
Mutant Bob

2
như @neves được đề cập trong nhận xét bên dưới, điều này đã thay đổi trong java 7 ( docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/… ). bạn có thể sử dụng JAVA_TOOL_OPTIONS (xem liên kết và câu trả lời bên dưới)
keisar

67

Nếu bạn muốn bất kỳ javaquy trình nào , không chỉ ant hay Tomcat, chọn các tùy chọn như -Xmxsử dụng biến môi trường _JAVA_OPTIONS.

Trong bash: export _JAVA_OPTIONS="-Xmx1g"


1
Hoàn hảo, điều này hoạt động tuyệt vời và giúp tôi tiết kiệm rất nhiều thời gian.
rodnaph

1
Trong Windows: set _JAVA_OPTIONS=-Xmx1g Để làm cho nó vĩnh viễn, làm cho một biến môi trường mới _JAVA_OPTIONS và đặt nó vào-Xmx1g
tim_hutton



10

Bạn không thể làm điều đó bằng cách sử dụng các biến môi trường. Nó được thực hiện thông qua các tùy chọn "không chuẩn". Chạy: java -Xđể biết chi tiết. Các tùy chọn bạn đang tìm là -Xmx-Xms(đây là kích thước heap "ban đầu", vì vậy có thể là những gì bạn đang tìm kiếm.)


1
Có vẻ như nó đã thay đổi trong Java 7: docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/…
neves

10

Bạn có thể sử dụng JAVA_TOOL_OPTIONS.

Thí dụ:

export JAVA_TOOL_OPTIONS=-Xmx512m

Nó đã được đề cập trong một số bình luận, và trong một câu trả lời khác .

Câu hỏi của OP khá cũ, nhưng vì nó là kết quả google đầu tiên cho câu hỏi, tôi nghĩ tôi sẽ thêm câu trả lời ở đây để rõ ràng hơn.


4

Tôi nghĩ lựa chọn duy nhất của bạn là bọc java trong một tập lệnh thay thế các biến môi trường vào dòng lệnh


3

Một số lưu ý:

  1. Kiến Apache không biết gì về JAVA_OPTS, trong khi các script khởi động của Tomcat thì có. Đối với kiến ​​Apache, sử dụng ANT_OPTS để ảnh hưởng đến môi trường cho JVM chạy / ant /, nhưng không ảnh hưởng đến những thứ mà kiến ​​có thể khởi chạy.

  2. Kích thước heap tối đa mà bạn có thể đặt hoàn toàn phụ thuộc vào môi trường: đối với hầu hết các hệ thống 32 bit, dung lượng heap tối đa mà bạn có thể yêu cầu, bất kể bộ nhớ khả dụng, nằm trong phạm vi 2GiB. Heap lớn nhất trên hệ thống 64 bit là "thực sự lớn". Ngoài ra, trên thực tế bạn cũng bị giới hạn bởi bộ nhớ vật lý, vì heap được quản lý bởi JVM và bạn không muốn có nhiều hoán đổi diễn ra trên đĩa.

  3. Đối với môi trường máy chủ, bạn thường muốn đặt -Xms và -Xmx thành cùng một giá trị: điều này sẽ cố định kích thước của heap ở một kích thước nhất định và trình thu gom rác có ít công việc phải làm hơn vì heap sẽ không bao giờ phải re- có kích thước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.