2010-01-15 26 views
10

Tôi có một ứng dụng máy tính để bàn java để tìm kiếm các tập tin và nó thường đạt giới hạn heap mặc định khá sớm. Tôi sẽ không có quyền truy cập vào tất cả các hệ thống nó sẽ được cài đặt vì vậy tôi muốn tăng kích thước heap JVM trong chính ứng dụng đó. Ai có thể giúp tôi làm thế nào tôi có thể làm điều đó theo chương trình trong ứng dụng của tôiLàm thế nào để tăng kích thước heap java theo lập trình

+2

Tại sao bạn không chọn thêm một số tập lệnh bắt đầu (dơi hoặc sh) với các tham số bắt đầu được xác định cho jvm (như Xmx) và triển khai nó cùng với chính ứng dụng. –

+3

Điều gì sẽ là điểm thiết lập giới hạn nếu bất kỳ ứng dụng nào chỉ có thể tăng nó theo ý muốn? –

+0

bạn không thể lập trình thay đổi các ràng buộc bộ nhớ trong một ứng dụng đang chạy –

Trả lời

2

Xem bài đăng này về tăng kích thước java heap:

increase the java heap size permanently?

Có lẽ bạn cũng có thể tiêu diệt một số phần của mã của bạn để giảm thiểu sử dụng bộ nhớ.

Trân trọng

4

Không có API chuẩn nào để làm như vậy.

Tôi khuyên bạn nên sử dụng Java Web Start để gọi ứng dụng của bạn (có thể được sử dụng cho các ứng dụng cục bộ trong Sun Java 6 mới nhất) vì nó cho phép bạn chỉ định các giá trị cho điều này.

Sau đó, bạn có thể có ba hoặc bốn liên kết trỏ đến chính xác cùng một tệp nhưng với kích thước heap "Nhỏ", "Trung bình", "Lớn", "Gigantic".

2

Hãy xem một cái gì đó như launch4j và xem xét việc triển khai các tệp thi hành mà bạn có thể kiểm soát giới hạn khi ai đó bắt đầu chạy ứng dụng của bạn.

Bạn sẽ không thể thực hiện việc này theo lập trình.

2

Đối với các ứng dụng dành cho máy tính để bàn, tôi khuyên bạn nên cung cấp trình chạy có thể chỉ định kích thước bộ nhớ bạn muốn. Ngoài cấu hình của JVM, bạn cũng có thể cung cấp biểu tượng, liên kết tệp, v.v.

Xem chi tiết này SO question để chọn phương án triển khai.

6

Đặt -Xmx thành một biểu diễn không có nghĩa là JVM sẽ phân bổ nhiều bộ nhớ đó khi khởi động. JVM sẽ chỉ phân bổ -Xms (cộng thêm chi phí) cho đến khi cần thêm khoảng trống. Bạn có cần phải bảo vệ người dùng của bạn khỏi bị gián đoạn bộ nhớ ảo hoặc phân bổ bộ nhớ không thành công từ hệ điều hành? Nếu không, chỉ cần đặt Xmx thành một giá trị lớn. Lưu ý rằng các JVM Windows 32bit thường sẽ bỏ qua các thiết lập Xmx lớn hơn 1.2Gig, vì vậy tốt nhất là không yêu cầu nhiều hơn một biểu diễn hoặc để an toàn.

+1

Các JVM 32 bit sẽ không bỏ qua các kích thước heap tối đa lớn, thay vào đó chúng sẽ không bắt đầu. Chỉ cần đặt -mx1200m hoặc tương tự. (-mx hoạt động tốt như -Xmx) –

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