2012-12-17 31 views
5

Tôi đã chuyển từ Windows 7 (32 bit) sang Windows 7 (64 bit) vì tôi đã thêm 4 Gb RAM vào 2 GB của mình. Và bây giờ khi tôi đang chạy Eclipse Juno EE. Trong Windows Task Manager tôi thấy rằng quá trình javaw.exe đang ăn ~ 380 Mb RAM, tôi không thấy điều này trước đây, khi tôi đang sử dụng hệ điều hành 32 bit. Tôi thậm chí không cố gắng ăn trưa bất kỳ dự án nào. Tôi đã viết mã này:Quá trình javaw.exe trong Windows 64 có tiêu thụ nhiều bộ nhớ hơn không?

public static void main(String[] args) { 
    Runtime runtime = Runtime.getRuntime(); 
    System.out.println(runtime.maxMemory()); 
} 

Nó cho thấy rằng đối với JVM is allocated 1 338 507 264 bytes của tôi.

Điều đó có nghĩa là khi tôi chạy các dự án, quy trình này có thể tiêu thụ tới 1,3 GB RAM?

Tôi có gặp vấn đề gì với vấn đề này trong tương lai không?

+0

Trên máy 6 GB, 380MB không có gì phải lo lắng. Chẳng có vấn đề gì khi bỏ RAM không sử dụng. –

Trả lời

6

Phiên bản 64 bit sẽ sử dụng JVM -server và có kích thước heap tối đa mặc định cao hơn. Phiên bản Windows 32 bit sử dụng các JVM -client theo mặc định và nó sử dụng ít tài nguyên hơn theo mặc định vì nó được thiết kế để chạy trên các máy nhỏ hơn, nó có xu hướng chậm hơn cho các chương trình chạy dài như là kết quả (JVM của khách hàng có tải nhanh hơn để chạy ngắn chương trình như applet)

Nếu bạn đặt kích thước heap tối đa, họ nên sử dụng khoảng cùng một lượng bộ nhớ nếu bạn có một phiên bản mới của Java 6, hoặc Java 7.

+0

Không trực tiếp liên quan đến vấn đề của op - Tôi nghĩ rằng tôi đã đọc ở đâu đó rằng cùng một chương trình sử dụng nhiều bộ nhớ hơn với một JVM 64 bit (tôi nghĩ rằng nó là theo thứ tự 50% hoặc hơn) ... – assylias

+1

Java 5 và đầu Java 6 không sử dụng CompressedOops (tham chiếu 32 bit) và dẫn đến tăng khoảng 50% mức tiêu thụ bộ nhớ.Đó là vì lý do này mà 32 GB không phải là một kích thước heap tốt (như bạn bị mất Oops nén) và bạn cần phải đi lên đến 48 GB để có được bộ nhớ sử dụng nhiều hơn. Vẫn còn một sự gia tăng nhưng tôi cho rằng nó gần 10% và không phải là điều bạn có thể chú ý. –

+0

Và làm cách nào tôi có thể đặt kích thước heap? –

2

Runtime.maxMemory():

Trả lại số tiền tối đa tối đa bộ nhớ mà máy ảo Java wi sẽ cố gắng sử dụng.

Đó là giới hạn trên. Nó không có nghĩa là JVM đã phân bổ trước bộ nhớ này. Việc sử dụng bộ nhớ của quá trình của bạn sẽ tăng lên khi bạn đang tạo các đối tượng và giữ chúng xung quanh, tối đa kích thước heap tối đa mà bạn có thể cấu hình.

Trong Windows Task Manager tôi thấy rằng quá trình javaw.exe đang ăn ~ 380 Mb RAM

Có rất nhiều khía cạnh để sử dụng bộ nhớ: có không gian địa chỉ, RAM ảo, RAM vật lý, vv Tùy thuộc trên cột nào bạn đang xem trong Trình quản lý tác vụ, số bạn nhìn thấy ở đó có thể có một trong nhiều ý nghĩa khác nhau.

tôi swiched đến từ Windows 7 (32 bit) Windows 7 (64 bit)

Nói chung, đó là sự thật mà 64-bit đang đòi hỏi nhiều bộ nhớ hơn mã 32-bit tương đương. Đối với một điều, con trỏ rộng hơn và do đó chiếm nhiều không gian hơn. Điều này áp dụng cho JVM như nó thực hiện cho bất kỳ quá trình nào khác. Tuy nhiên, JVM thực hiện một số bước để giảm bớt tác động. Một biện pháp như vậy là CompressedOops.

+0

Tôi không biết cột phù thủy tôi đang tìm kiếm, bởi vì tôi đến từ Ukraine và tôi có phiên bản tiếng Nga của Windows. Nghĩa đen nó được dịch là "Bộ nhớ". –

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