2010-06-12 43 views
69

Tôi cần chạy một ứng dụng chuyên sâu bộ nhớ Java sử dụng nhiều hơn 2GB, nhưng tôi đang gặp sự cố để tăng kích thước tối đa heap. Cho đến nay, tôi đã thử các cách tiếp cận sau:Tăng kích thước heap tối đa JVM cho các ứng dụng chuyên sâu bộ nhớ

  • Đặt tham số -Xmx, ví dụ: -Xmx3000m. Cách tiếp cận này không thành công khi tạo ra JVM. Từ những gì tôi đã googled, có vẻ như -Xmx phải nhỏ hơn 2GB.

  • Sử dụng -XX:+AggressiveHeap option. Khi tôi thử phương pháp này tôi nhận được một lỗi "Không đủ bộ nhớ" cho biết kích thước heap là 1273,4 MB, mặc dù máy tính của tôi có 8GB bộ nhớ.

Có cách tiếp cận nào khác mà tôi có thể thử tăng kích thước heap tối đa của JVM không? Dưới đây là một bản tóm tắt các thông số kỹ thuật máy tính:

  • Hệ điều hành: Windows 7 (64 bit)
  • Processor: Core i7 của Intel (2.66 GHz)
  • Bộ nhớ: 8 GB
  • java -version:
java version "1.6.0_18" 
Java(TM) SE Runtime Environment (build 1.6.0_18-b07) 
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing) 
+6

BTW: Tối thiểu và kích thước bộ nhớ tối đa hiện nay là lựa chọn tiêu chuẩn. Bạn có thể sử dụng -ms và -mx thay vì -Xms và -Xmx. -X ?? được dành riêng cho các tùy chọn không chuẩn. –

+1

Tiêu chuẩn cho JVM nào? Chúng vẫn không chuẩn cho JVM HotSpot (1.8). Xem http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDJJFI – Huckle

Trả lời

43

có được cho mình một JVM 64-bit từ Oracle.

+1

Làm việc cho tôi :-) Chạy ứng dụng bằng cách sử dụng -Xmx4g và không có vấn đề cho đến nay. –

14

Tôi tin rằng giới hạn 2 GB dành cho Java 32 bit. Tôi nghĩ v1.6 luôn luôn là 64 bit, nhưng hãy thử buộc chế độ 64 bit chỉ để xem: thêm tùy chọn -d64.

+0

Tùy chọn -D64 không hoạt động, tôi sẽ thử sử dụng JVM 64 bit như GregS đề xuất và báo cáo kết quả. –

+1

Thiết bị chuyển mạch -d64 và -d32 hoạt động chính xác chỉ trên Solaris (ít nhất theo các tài liệu này): http://java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_layering. –

+0

@Alceu bạn có sử dụng -D64 hoặc -d64 không? Chúng khác nhau ... – Greg

79

Khi bạn đang sử dụng JVM ở chế độ 32 bit, kích thước heap tối đa có thể được phân bổ là 1280 MB. Vì vậy, nếu bạn muốn vượt xa điều đó, bạn cần gọi JVM ở chế độ 64-mode.

Bạn có thể sử dụng như sau:

$ java -d64 -Xms512m -Xmx4g HelloWorld 

nơi,

  • -d64: Sẽ cho phép 64-bit JVM
  • -Xms512m: Sẽ thiết lập kích thước heap ban đầu là 512 MB
  • -Xmx4g: Sẽ đặt kích thước heap tối đa là 4 GB

Bạn có thể điều chỉnh trong -Xms và -Xmx theo bạn yêu cầu (YMMV)

Một nguồn lực rất tốt trên JVM điều chỉnh hiệu suất, mà có thể muốn xem xét: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

+0

JVM của tôi là 32 bit và cho phép tối đa -Xmx1024M. Cũng sẽ thử phiên bản 64bit. – kiltek

+0

Tôi đã thử JVM 64-bit và nó hoạt động hoàn hảo. Bây giờ tôi có thể đặt 4096 MB kích thước heap tối đa. Khi bạn cài đặt cả 32 và 64 bit, ít nhất là trên Windows, bạn cần trỏ đường dẫn Java cho các ứng dụng của bạn đến phiên bản 64 bit mới được cài đặt. Nếu không, lỗi sẽ vẫn tồn tại. Trên Windows, điều này thường có thể được thực hiện bằng cách thay đổi đường dẫn Java trên Biến môi trường của hệ thống. – Fabiano

+0

Tôi đoán giới hạn cho heap tối đa không phải là 1280, nhưng gần 1700MB. Tôi đã sử dụng 1600MB heap tối đa trên cài đặt JVM 32 bit của mình và nó hoạt động tốt. – Fabiano

8

32-bit Java được giới hạn trong khoảng 1,4 đến 1,6 GB.

Oracle 32 bit heap FAQ

Trích

Giới hạn đống lý thuyết tối đa cho 32-bit JVM là 4G.Do các ràng buộc bổ sung khác nhau như trao đổi có sẵn, sử dụng không gian địa chỉ hạt nhân, phân mảnh bộ nhớ và phí máy ảo, trong thực tế giới hạn có thể thấp hơn nhiều. Trên hầu hết các hệ thống Windows 32 bit hiện đại, kích thước heap tối đa sẽ dao động từ 1.4G đến 1.6G. Trên hạt nhân Solaris 32 bit, không gian địa chỉ được giới hạn ở 2G. Trên hệ điều hành 64 bit chạy máy ảo 32 bit, kích thước heap tối đa có thể cao hơn, tiếp cận 4G trên nhiều hệ thống Solaris.

2

Dưới conf làm việc cho tôi:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/ 
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH 
export PATH 
export JAVA_HOME 

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server" 

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "[email protected]" 
Các vấn đề liên quan