2010-01-19 40 views
18

Số tiền tối đa của không gian heap mà người ta có thể phân bổ cho java trên nền tảng 64-bit là gì? Là nó không giới hạn?Bộ nhớ tối đa cho 64bit Java

+0

Tại sao bạn nghĩ nó không giới hạn? –

Trả lời

16

Về mặt lý thuyết 2 , nhưng có thể có những hạn chế (rõ ràng)

Theo this FAQ nó chỉ bị giới hạn bởi bộ nhớ và không gian hoán đổi trên hệ thống địa phương:

Ngày 64-bit máy ảo, bạn có 64 bit của địa chỉ để làm việc với kết quả trong một kích thước heap Java tối đa chỉ giới hạn bởi số lượng bộ nhớ vật lý và không gian hoán đổi mà hệ thống của bạn cung cấp.

Xem thêm Tại sao tôi không thể có được vùng heap lớn hơn với JVM 32 bit?

Cũng nên nhớ rằng bạn cần đặt heap tối đa qua dòng lệnh. Không có lệnh -Xmx. mà không có nó Java sử dụng 64mb + 30% = 83.2mb như một heap tối đa mặc định trên các máy 64 bit theo cùng một câu hỏi thường gặp.

java -Xmx1000g myClass 

hoạt động tốt trên máy của tôi. Nhưng dường như nó vẫn chưa hỗ trợ công cụ sửa đổi 't', do đó bạn không thể chỉ định bộ nhớ tối đa bằng terabyte :)

+0

1000g phù hợp với bạn? Tôi nghĩ rằng 'java' sẽ xác nhận nếu có đủ bộ nhớ trước khi tham gia vào tùy chọn đó. – asgs

13

Nếu bạn có thể biến mọi nguyên tử trong vũ trụ thành một byte RAM, bạn có thể phân bổ nó trong không gian địa chỉ 64 bit.

Thực ra, đó là một chút cường điệu.

Có 10^80 nguyên tử trong vũ trụ (theo WolframAlpha) và 2^64 byte không gian địa chỉ trong hệ thống 64 bit, vì vậy bạn chỉ có thể giải quyết 1 trong mỗi 5x10^60 nguyên tử . Nhưng nếu bạn có 18 triệu byte RAM, bạn có thể cần một vài lỗ đen lượng tử để cấp nguồn cho nó.

+0

@Stephen, tôi đã chỉnh sửa câu trả lời trước khi bạn đăng nhận xét của mình. Quy tắc WolframAlpha! –

+2

Sẽ không muốn chờ đợi toàn bộ số tiền đó! – overthink

+4

Bạn cần 266 bit để lập chỉ mục mọi nguyên tử trong vũ trụ –

0

Về lý thuyết, nó nằm giữa 2^632^64 byte.

Trong thực tế, nó bị giới hạn bởi dung lượng bộ nhớ vật lý và không gian hoán đổi có sẵn trên máy của bạn. Và bộ nhớ vật lý bị giới hạn bởi chipset của bạn (tức là số chân địa chỉ trên bus địa chỉ bộ nhớ vật lý) và bo mạch chủ (tức là số lượng và kích thước của các ổ cắm DIMM).

+2

Đối với AMD64, các thông số kỹ thuật hiện tại thấy trước 40-52 chân địa chỉ. Ngoài ra, chúng hỗ trợ kiến ​​trúc NUMA trong đó mỗi bộ xử lý có một bộ nhớ mà các bộ vi xử lý khác chỉ có thể truy cập gián tiếp. – MSalters

3

Điều này có thể phụ thuộc vào hệ thống máy ảo của bạn đang chạy. Nếu bạn đang chạy kiến ​​trúc AMD x64, không gian địa chỉ của bộ xử lý hiện được vận chuyển sử dụng 48 bit, chứ không phải 64. Điều này dẫn đến tối đa lý thuyết khoảng 256 TB. (Xem http://en.wikipedia.org/wiki/X86-64)

Tôi không phải là chuyên gia về máy ảo, nhưng mọi hệ điều hành hiện đại thường sẽ cung cấp nhiều bộ nhớ hơn vì có RAM vật lý cộng với bộ nhớ ảo có sẵn. Có lẽ đó là những gì VM sẽ chuyển đến ứng dụng của bạn tùy thuộc vào cấu hình của nó.

+3

Sổ tay AMD có liên quan nói rằng không gian địa chỉ ảo thực ra là 64 bit (Chương 2.2.1, Sổ tay Lập trình Kiến trúc AMD64, v3.14, 09.2007) – MSalters

2

Với các máy ảo gần đây từ Sun, kích thước giới hạn heap thực tế thường gấp 512 lần bộ nhớ vật lý và/hoặc ảo sẵn có. Ngay cả khi giới hạn lý thuyết cao hơn nhiều, VM sẽ phân bổ 1 byte cho mục đích maangement cho mỗi 512 byte bộ nhớ heap khi khởi động, vì vậy 1TB của heap sẽ ngay lập tức yêu cầu 2GB cho việc quản lý bộ nhớ.

+0

Bạn có thể trích dẫn một tham chiếu không? – Fakrudeen

+0

Tham chiếu cho cái gì? – jarnbjo

+0

512 lần điều ... – Fakrudeen

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