2011-07-10 25 views
21

Chỉ cần đối mặt với vấn đề lạ. Khi tôi gõKhông thể đặt trước đủ không gian cho đối tượng heap để bắt đầu JVM

java -version 

tôi đã nhận

Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

.

java -Xms64m -Xmx64m -version 

Lệnh này hoạt động tốt

java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode) 

Nếu tôi thay đổi XMS, Xmx đến 128, tôi nhận được lỗi một lần nữa.

Sử dụng top lệnh và free -m tôi có thể thấy, tôi đã nhận được hơn 192 mb miễn phí, vậy tại sao tôi vẫn gặp lỗi này?

Mem: 262144k total, 64760k used, 197384k free,  0k buffers 
Swap:  0k total,  0k used,  0k free,  0k cached 

Cảm ơn bạn

+0

Tôi đột nhiên có vấn đề này ngày hôm nay - hóa ra tôi đã chuyển sang OpenJDK JRE 7. Thông thường tôi đang sử dụng Oracle JDK 8 không hiển thị vấn đề này - ít nhất là không có một số lượng nhỏ máy ảo. –

Trả lời

11

Dường như máy bạn đang cố gắng để chạy trên chỉ có 256 MB bộ nhớ.

Có lẽ JVM cố gắng phân bổ khối bộ nhớ lớn, liền kề 64 MB. 192 MB mà bạn có miễn phí có thể bị phân mảnh thành các phần nhỏ hơn, do đó không có khối liên tục 64 MB miễn phí để phân bổ.

Hãy thử bắt đầu chương trình Java của bạn với kích thước đống nhỏ hơn, ví dụ:

java -Xms16m ... 
+0

Có, máy của tôi chỉ có 256 mb, với -Xms16m và -Xms64m nó hoạt động tốt. Nhưng 64 là không đủ cho nhu cầu của tôi. Nó có thể được cố định bằng cách nào đó, vì vậy tôi có thể sử dụng 128 mb? – user12384512

+0

Lưu ý rằng '-Xms' đặt kích thước heap ban đầu (' -Xmx' đặt kích thước heap tối đa). Chương trình của bạn có thực sự cần kích thước heap ** ban đầu ** 64 MB không? Tại sao không để JVM tự động phát triển? – Jesper

+0

Vâng, tôi biết. Nhưng nó không thực sự quan trọng. Kể từ khi java -Xms16m -Xmx128m -version không thành công quá – user12384512

5

Theo this post thông báo lỗi này có nghĩa là:

kích thước Heap lớn hơn bộ nhớ vật lý của máy tính.

Chỉnh sửa: Heap không phải là bộ nhớ duy nhất được đặt trước, tôi cho là vậy. Ít nhất có các thiết lập JVM khác như PermGenSpace yêu cầu bộ nhớ. Với kích thước heap 128M và PermGenSpace là 64M bạn đã lấp đầy khoảng trống sẵn có.

Tại sao không giảm kích thước các cài đặt bộ nhớ khác để giải phóng dung lượng cho heap?

12

Tôi gặp vấn đề tương tự khi sử dụng phiên bản 32 bit của java trong môi trường 64 bit. Khi sử dụng 64 java trong một hệ điều hành 64 nó đã được ok.

+0

Tôi có cùng một vấn đề. Sử dụng Java 32 bit trên hệ thống 64 bit. Bắt đầu với Xmx1024 dẫn đến lỗi trên. Bắt đầu với Xmx512 hoạt động tốt! – T3rm1

+0

Tôi gặp vấn đề tương tự. Tôi đã sử dụng 32bit JRE trên PC 64bit của mình.Tôi đã thay đổi hệ thống JRE thành 64bit và vấn đề của tôi được giải quyết. – Devrim

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