Xét dòng lệnh sauTùy chọn thời gian chạy Java trùng lặp: thứ tự ưu tiên là gì?
java -Xms128m -Xms256m myapp.jar
Những thiết lập này sẽ áp dụng cho JVM bộ nhớ tối thiểu (Xms
tùy chọn): 128 hoặc 256M?
Xét dòng lệnh sauTùy chọn thời gian chạy Java trùng lặp: thứ tự ưu tiên là gì?
java -Xms128m -Xms256m myapp.jar
Những thiết lập này sẽ áp dụng cho JVM bộ nhớ tối thiểu (Xms
tùy chọn): 128 hoặc 256M?
Phụ thuộc vào JVM, có lẽ là phiên bản ... có lẽ thậm chí có bao nhiêu clip giấy bạn có trên bàn làm việc của bạn vào thời điểm đó. Nó thậm chí có thể không hoạt động. Đừng làm thế.
Nếu nó nằm ngoài tầm kiểm soát của bạn vì một số lý do, hãy biên dịch và chạy theo cách tương tự như bạn đã chạy bình. Nhưng được cảnh báo, dựa vào thứ tự của các tùy chọn là một ý tưởng thực sự tồi tệ.
public class TotalMemory
{
public static void main(String[] args)
{
System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory());
System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory());
}
}
+1 - tốt hơn đếm những kẹp giấy :-). Nghiêm túc, nó không phải là khoa học tên lửa để thay đổi bất cứ điều gì là đi qua những đối số mơ hồ. –
đang thử với số lượng kẹp giấy khác nhau. không thể tìm thấy công tắc đầu tiên – OganM
Tôi đặt cược nó là thẻ thứ hai. Đối số thường được xử lý theo thứ tự:
for(int i=0; i<argc; i++) {
process_argument(argv[i]);
}
Nhưng nếu tôi đang viết phân tích cú pháp đối số java, tôi sẽ phàn nàn về các đối số xung đột.
JVM của IBM xử lý trường hợp bên phải của đối số làm người chiến thắng. Tôi không thể nói chuyện với HotSpot, v.v.
Chúng tôi thực hiện điều này vì thường có các dòng lệnh lồng nhau từ tệp hàng loạt nơi mọi người chỉ có thể thêm vào cuối và muốn làm người chiến thắng.
+1 để thực sự trả lời câu hỏi thay vì pontificating. – JimN
Thực tế: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.zos.70.doc/diag/appendixes/cmdline/cmdline_specifying.html –
Như mọi khi, hãy kiểm tra triển khai cụ thể của JVM địa phương của bạn nhưng đây là cách nhanh chóng để kiểm tra từ dòng lệnh mà không cần phải viết mã.
> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
uintx MaxHeapSize := 2147483648 {product}
Vì vậy, bạn sẽ thấy trong trường hợp này, trường hợp thứ hai của đối số (2G) là những gì được ưu tiên (ít nhất là trong 1.8) và đã được kinh nghiệm của tôi với hầu hết các phiên bản hiện đại khác.
'java -Xmx1G -XX: + PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize', cách này dễ suy luận hơn. – ryenus
Không có lỗi đánh máy nào được đề cập. Các tùy chọn Xms được sử dụng hai lần với mục đích. Đây là chất của câu hỏi – fabien7474