2011-07-12 39 views
12

Giả sử tiền không phải là yếu tố hạn chế và tôi muốn viết một chương trình Java chạy trên một máy tính mạnh mẽ.Hạn chế thực tế của bộ nhớ JVM và mức sử dụng CPU?

Mục tiêu sẽ là làm cho chương trình Java chạy nhanh nhất có thể mà không cần phải hoán đổi hoặc chuyển đến đĩa cho bất kỳ thứ gì.

Hãy nói rằng máy tính này có:

  • 1 TB RAM (64 16GB DIMM)
  • 64 nhân xử lý (8 bộ vi xử lý 8-core)
  • chạy 64-bit Ubuntu

Có thể một cá thể đơn lẻ của chương trình java đang chạy trong JVM tận dụng tối đa bộ nhớ RAM và bộ vi xử lý này không?

Có bất kỳ cân nhắc thực tế nào có thể hạn chế việc sử dụng và hiệu quả không?

  • Quy trình hệ điều hành (bộ nhớ & chủ đề) giới hạn?
  • Giới hạn bộ nhớ/heap JVM?
  • Giới hạn luồng JVM?

Cảm ơn, Galen

+0

Nghi ngờ của tôi là máy chủ mới nhất của Sun JVM cho Linux sẽ có thể khai thác điều này khá tốt (miễn là không có tắc nghẽn cấp ứng dụng) - không biết chắc chắn. – antlersoft

Trả lời

8

Một trường hợp duy nhất có thể cố gắng acces tất cả các bộ nhớ, tuy nhiên vùng NUMA có nghĩa là những thứ như GC biểu diễn các xấu truy cập vào bộ nhớ ở một vùng khác. Điều này đang nhanh hơn và JVM có một số hỗ trợ NUMA nhưng nó cần phải cải thiện nếu bạn muốn khả năng mở rộng. Mặc dù vậy bạn có thể nhận được 256 MB đống và sử dụng 700 bộ nhớ riêng/trực tiếp mà không có vấn đề này. ;)

Giới hạn lớn nhất nếu bạn có nhiều bộ nhớ là mảng, bộ sưu tập và ByteBuffer (đối với các tệp ánh xạ bộ nhớ) đều bị giới hạn ở kích thước 2 tỷ. (2^31-1)

Bạn có thể giải quyết các vấn đề này với các bộ sưu tập tùy chỉnh, nhưng thực sự một cái gì đó Java của nó sẽ hỗ trợ IMHO.

BTW: Bạn có thể mua Dell R910 với 1 TB bộ nhớ và 24 lõi/48 luồng với Ubuntu với giá £ 40K.

BTW: Tôi chỉ có kinh nghiệm về các JVM có kích thước tối đa 40 GB.

1

Trước hết, chính chương trình Java: mã được thiết kế kém sẽ không sử dụng nhiều công suất máy tính đó. Ví dụ, các chuỗi được triển khai kém có thể làm cho hiệu suất của bạn chậm.

Hệ điều hành cũng là một yếu tố hạn chế: không phải tất cả hệ điều hành đều có thể xử lý tốt dung lượng bộ nhớ đó.

Tôi nghĩ rằng JVM có thể xử lý lượng bộ nhớ đó, vì hệ điều hành hỗ trợ nó.

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