2009-05-01 22 views
9

Khi bạn chạy một chương trình thông qua dòng lệnh, bạn có thể sử dụng java -Xms -Xmx để chỉ định kích thước heap. Nếu chương trình sẽ được chạy bằng cách nhấp đúp vào tệp .jar, có cách nào để sử dụng nhiều heap hơn tiêu chuẩn không?Phân bổ nhiều khoảng trống hơn cho một bình Java

Trả lời

8

No. Đó là lý do tại sao tôi thường tạo một tệp .bat hoặc .sh với các tham số đó và người dùng trực tiếp để chạy nó thay vì .jar. Thật không may, đó là một chút xấu xí để có để bật lên một cửa sổ nhắc lệnh, nhưng điều đó không thể được giúp đỡ.

Là một lợi ích phụ, nếu ứng dụng của bạn bị đóng băng, bạn có thể hướng người dùng đặt pause vào tệp lô (hoặc tự làm) và sau đó bạn có thể thấy bất kỳ dấu vết ngăn xếp nào xảy ra.

Chỉnh sửa: Bạn cũng có thể sử dụng trình bao bọc thực thi như JSmooth hoặc Launch4J thay vì tệp theo lô. Tuy nhiên, bạn sẽ mất một số tính tương thích đa nền tảng.

+0

@mmyers: Nguyền ngón tay nhỏ nhanh của bạn! Đánh bại tôi với nó bằng 54 giây! – Welbog

+0

Xin lỗi, tôi thấy bạn đang bận chỉnh sửa câu hỏi. (Tôi nghĩ rằng đó là lần đầu tiên bất cứ ai đã từng nguyền rủa những ngón tay nhỏ bé của tôi ...) –

+2

Bạn cũng có thể sử dụng một cái gì đó như JSmooth: http://jsmooth.sourceforge.net/ – millimoose

5

Thay vì bấm đúp vào tệp .jar trực tiếp, bạn có thể sử dụng tệp lô chạy java -jar -Xms -Xmx your_file.jar. Từ quan điểm của người dùng, nó giống nhau, nhưng nó cho phép bạn kiểm soát nhiều hơn lệnh thực sự chạy.

+0

+1 cho cùng một câu trả lời tôi đã làm. :) –

2

Bạn có thể sử dụng JSmooth hoặc trình bao bọc tương tự, tạo tệp EXE để khởi chạy JVM với các tham số cần thiết. Bằng cách đó bạn có thể tránh việc có một tập tin .bat và hộp thoại giao diện điều khiển của nó. Vẫn còn một cách nữa là bắt đầu chương trình thực tế trong tiến trình mới bằng cách sử dụng Runtime.exec hoặc ProcessBuilder.

5

Bạn có thể tự khởi động lại jar bằng Runtime.getRuntime(). Exec() với các tùy chọn bạn muốn. Các jar có thể chứa nhiều hơn một phương thức main() (trong các lớp khác nhau) và bạn có thể có một cuộc gọi khác thông qua một exec().

+0

Một lựa chọn tốt khác (mặc dù không dễ dàng tìm ra dung lượng bộ nhớ có sẵn để sử dụng). +1 –

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