"Lỗi xảy ra trong quá trình khởi tạo máy ảo; Không thể dành đủ dung lượng cho đống đối tượng ”sử dụng -Xmx3G


93

Trước hết, tôi có một hộp với 8gb ram, vì vậy tôi nghi ngờ tổng bộ nhớ là vấn đề. Ứng dụng này chạy tốt trên máy có 6gb trở xuống.

Tôi đang cố gắng dành 3GB dung lượng bằng cách sử dụng -Xmx3G trong "Đối số VM" trong Chạy cấu hình trong Eclipse.

Mỗi khi tôi cố gắng dự trữ hơn 1500mb, tôi gặp lỗi này: “Đã xảy ra lỗi trong quá trình khởi tạo VM; Không thể dành đủ dung lượng cho đống đối tượng ”sử dụng -Xmx3G

Chuyện gì đang xảy ra ở đây?


2
Bạn có phiên bản java nào? Bạn đang chạy trên hệ điều hành nào?
Adam Rofer

Đây là Win7 và tôi đã cài đặt 3 phiên bản Java khác nhau. Một trong số đó là JRE 32-bit mà Eclipse đang sử dụng.
user1212731 16/02/12

3
Đừng quên đánh dấu một câu trả lời là đúng.
xdhmoore

Chỉ cần thay đổi cài đặt trong gridle.property với không gian sutaible của bạn
Bhushan

Câu trả lời:


64

Có thể là bạn đang sử dụng jvm 32-bit trên máy đó?


8
Xin lỗi vì câu hỏi ngu ngốc, nhưng tôi sẽ kiểm tra nó như thế nào? Và làm thế nào tôi có thể sử dụng 64-bit?
user1212731 16/02/12

3
Trên thực tế, tôi vừa thử java -d64 -version trong dòng lệnh và nó xuất hiện với máy chủ máy chủ 64-bit.
user1212731

6
Rõ ràng Eclipse đang sử dụng phiên bản 32-bit của JRE mà tôi đã cài đặt trước đó, mặc dù 64-bit là bản cài đặt mới nhất. Tôi đã thay đổi cài đặt trong Tùy chọn -> JRE đã cài đặt để giải quyết vấn đề này. Cảm ơn bạn rất nhiều vì câu trả lời của bạn!
dùng1212731

3
trong mọi trường hợp, 32 bit không phải là đủ để giải quyết 4gb?
Thomas

7
Nó nên được, nhưng điều này giải quyết vấn đề của tôi. Không ủng hộ cho câu trả lời này vì thiếu lời giải thích. Liên kết này giải thích làm thế nào một 32bit JVM không thể đi qua 1gb không gian đống max
Steven

58

Đây là cách khắc phục nó: Đi tới Start->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _JAVA_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  

Thay đổi điều này thành con đường thích hợp của bạn .


4
Chỉ là một ghi chú cho những người khác. Bạn thêm một biến HỆ THỐNG, không phải một biến USER. Tôi gặp sự cố này trong Eclipse và không phải khởi động lại máy sau khi thực hiện các thay đổi ở trên ... Tôi chỉ phải khởi động lại Eclipse. Cảm ơn!
Captain_jim1

Đối với những người tò mò, cờ -Xmx trong _JAVA_OPTIONS chỉ định kích thước đống JVM tối đa được phép. Điều này ngăn JVM yêu cầu không gian không hợp lý (đặc biệt là không thể liên tục đối với các máy 32 bit ...)
varun

41

Đây thực sự không phải là vấn đề dành riêng cho Eclipse; đó là một vấn đề chung của Java trên Windows. Đó là do cách JVM phân bổ bộ nhớ trên Windows; nó nhấn mạnh vào việc phân bổ một phần bộ nhớ liền kề, điều mà Windows thường không thể cung cấp, ngay cả khi có đủ các phần riêng biệt để đáp ứng yêu cầu cấp phát. Có những tiện ích sẽ cố gắng giúp Windows "chống phân mảnh" bộ nhớ của nó, về lý thuyết, sẽ giúp giải quyết tình trạng này; nhưng tôi đã không thực sự thử chúng một cách nghiêm túc nên không thể nói về hiệu quả của chúng. Một điều mà đôi khi tôi đã nghe thấy có thể hữu ích là khởi động lại Windows và trước khi khởi động bất kỳ ứng dụng nào khác, hãy khởi chạy ứng dụng Java cần bộ nhớ lớn. Nếu bạn may mắn, Windows sẽ không phân mảnh không gian bộ nhớ của nó và Java sẽ nhận được khối liền kề được yêu cầu.

Ở đâu đó trên interwebs có nhiều giải thích và phân tích kỹ thuật hơn về vấn đề này, nhưng tôi không có bất kỳ tài liệu tham khảo nào.

Tuy nhiên, tôi thấy điều này có vẻ hữu ích: https://stackoverflow.com/a/497757/639520


2
Trong trường hợp của tôi, câu trả lời của bạn có vẻ hiệu quả. Tôi đã không khởi động lại cửa sổ nhưng tôi đã thử đóng các ứng dụng khác trong cửa sổ của mình rồi chạy java và nó có thể khởi động máy ảo.
sttaq

22

Đầu tiên JRE 32bits không thể sử dụng nhiều hơn ~ 1.5Gb ram. Vì vậy, nếu bạn muốn nhiều hơn, hãy sử dụng JRE 64bits.

Thứ hai, Khi một JVM mới bắt đầu, tổng thuộc tính -Xmx của tất cả JVM đang chạy và kiểm tra xem hệ thống có còn đủ bộ nhớ để chạy ở -Xmx của riêng chúng hay không, nếu không đủ thì lỗi xảy ra.


15

Tôi đang sử dụng Liferay với máy chủ Tomcat từ IDE eclipse. Tôi đã gặp phải lỗi tương tự này khi nhấp vào khởi động máy chủ. Nhấp đúp vào máy chủ từ nhật thực. nó sẽ mở ra trang Tổng quan về Máy chủ. Đã cập nhật đối số bộ nhớ từ -Xmx1024m -XX: MaxPermSize = 256m đến -Xmx512m -XX: MaxPermSize = 256m. Sau đó, nó đã làm việc cho tôi.



9

Đảm bảo rằng Eclipse thực sự đang chạy cùng một JVM mà bạn nghĩ rằng nó đang chạy. Nếu bạn sử dụng java trong trình duyệt web của mình, bạn có thể có phiên bản 32-bit nổi xung quanh đó có thể được ưu tiên nếu nó được cài đặt hoặc cập nhật gần đây.

Để hoàn toàn chắc chắn, tôi khuyên bạn nên thêm hai dòng này vào eclipse.initệp của bạn ở trên cùng:

-vm 
C:/Java/jdk1.6.0_27/bin

... nơi C:/Java/jdk1.6.0_27/binđặt JVM mà tôi biết là 64-bit trên máy tính của tôi . Hãy chắc chắn để có binthư mục ở đó.

(Như một phần thưởng, trên Windows 7, điều này cũng cho phép bạn thực sự "ghim tab", đó là lý do tại sao tôi phải làm điều này cho mục đích sử dụng của riêng mình)


Đối số -vm phải trỏ đến tệp thực thi Java, không chỉ là một thư mục. Xem wiki.eclipse.org/%C2%A0eclipse.ini#Specification_the_JVM
E-Riz

1
Sai lầm. Xem lỗi này Eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer

Đây thực sự là một vấn đề! Eclipse đang sử dụng phiên bản 32-bit của JRE mà tôi đã cài đặt tại một thời điểm nào đó. Cảm ơn bạn rất nhiều vì câu trả lời và dẫn tôi đi đúng hướng! Tôi đánh giá rất cao nó.
dùng1212731

@AdamRofer, lỗi đó rất thú vị, nhưng đặc biệt là về Windows 7 và để khắc phục sự cố ghim Eclipse vào thanh tác vụ. Nói chung, eclipse.ini nên trỏ đến tệp thực thi java, mặc dù trình khởi chạy Equinox có vẻ thông minh ở chỗ nó sẽ tìm kiếm tệp thực thi java nếu -vm trỏ đến một thư mục (ít nhất là trên Windows).
E-Riz

@ E-Riz "nên" là quá khắt khe đối với sở thích của tôi :) Hy vọng rằng họ giải quyết được lỗi mà không cần phải thay đổi đối số vm đôi khi. Sau đây là thông tin tốt hơn để họ cập nhật trên eclipse.initrang của họ : wiki.eclipse.org/…
Adam Rofer

5

Đây là vấn đề về kích thước Heap. Chỉnh sửa .bat(Tệp hàng loạt) của bạn. Nó có thể đang hiển thị kích thước Heap 1024. Thay đổi nó thành 512 Sau đó, nó sẽ hoạt động.


2

Tôi cũng gặp vấn đề tương tự khi sử dụng Eclipse 32 bit và JVM được sử dụng bởi nó là 64 bit. Khi tôi định tuyến Eclipse sang JVM 32 bit thì nó hoạt động


2

Chỉ cần đặt #biểu tượng ở phía trước org.gradle.jvmargs=-Xmx1536mtrong gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

Không chắc nó hoạt động như thế nào khi thử Kotlin-multiplatform trên mac os! dù sao, cảm ơn!
Chintan Soni

1

Tôi biết rằng tôi hơi muộn, nhưng đây là câu trả lời của tôi:

Tôi vừa cài đặt Phiên bản trực tuyến Java từ Oracle (không phải phiên bản 64-Bit ngoại tuyến).

Sau khi thêm biến JAVA_HOME ENV, biến này mới hoạt động!

Hy vọng tôi có thể giúp :)


0

Có thể bạn đang thử các lựa chọn sai dù sao. Tôi gặp lỗi tương tự với nhật ký lỗi hỗ trợ:

Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

Tôi là trường hợp của tôi, phần mềm chưa hỗ trợ java 8 (tập lệnh đang sử dụng các đối số JVM cũ) nhưng tôi đã có java 8 theo mặc định.


0

Một trong những lý do cho sự cố này là không có bộ nhớ nào để Tomcat khởi động. Cố gắng xóa phần mềm đang chạy không mong muốn khỏi windows và khởi động lại nhật thực và tomcat.

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.