2010-03-31 22 views
5

Công ty chúng tôi đang có kế hoạch chuyển sang JVM 64 bit để tránh xa giới hạn kích thước tối đa 2 GB. Google đã cho tôi kết quả rất hỗn hợp về hiệu suất JVM 64 bit. Có ai đã thử chuyển sang 64 bit java và chia sẻ kinh nghiệm của bạnTrải nghiệm di chuyển đến JVM 64 bit

+0

x64 hoặc không phải là x64? Đối với hầu hết các phần nó chỉ làm tăng việc sử dụng bộ nhớ và do đó băng thông bộ nhớ. Đối với x86, AMD đã tạo ra một tập lệnh ít điên hơn x86. –

+1

@ Người dùng, không phải ai cũng bị ám ảnh bởi những con số đó như bạn! : P Một số người (bạn có thể tưởng tượng?) Trả lời chỉ để giúp đỡ. –

+2

@Vladimir Dyuzhev: Bị ám ảnh không phải là vấn đề. Đó là cách cộng đồng hoạt động. Trả lời và chấp nhận là cách người ta xác định ai có lịch sử câu trả lời hay. Không chấp nhận nghĩa là không có lịch sử câu trả lời hay. Nếu không có lịch sử của câu trả lời tốt, thật khó để biết có bao nhiêu niềm tin để đưa vào một câu trả lời. –

Trả lời

3

Nếu bạn cần đống lớn hơn, sau đó câu hỏi về hiệu suất là khá tranh luận, phải không? Hay bạn có kế hoạch mở rộng theo chiều ngang?

Vấn đề chính mà tôi đã nghe với ứng dụng 64 bit là việc thu gom rác đầy đủ có thể mất nhiều thời gian (vì nó dựa trên số lượng đối tượng trực tiếp). Vì vậy, bạn muốn điều chỉnh cẩn thận các thông số GC để tránh các bộ sưu tập đầy đủ (tôi đã nghe một giai thoại về một công ty có 64 Gb heap, và điều chỉnh GC của họ để họ không bao giờ đến một GC đầy đủ; xuống mỗi tuần một lần).

Ngoài ra, nhận ra rằng Java là 32-bit theo thiết kế, do đó bạn không có khả năng thấy bất kỳ sự gia tăng hiệu suất lớn nào từ việc di chuyển dữ liệu 64 bit cùng một lúc. Và bạn vẫn bị giới hạn chỉ số mảng 32 bit.

+0

Chúng tôi có một JVM, nơi gc chạy song song hoạt động tốt, nhưng nếu gc không được thực hiện khi gc tiếp theo được bắt đầu, JVM tạm dừng cho đến khi gc thứ hai được thực hiện. Xấu! Xảy ra một chút khi hệ điều hành rất tích cực về việc trao đổi bộ nhớ. –

+0

Bạn có thể giải thích ý nghĩa của Java bằng thiết kế 32-bit không? từ những gì tôi biết, Java là nền tảng độc lập bởi thiết kế không? – Pacerier

+0

Nhận xét về 32 bit theo thiết kế là lẻ. Khi chúng ta thảo luận về 32/64/128 bit, nó thường là về kích thước của một con trỏ, ảnh hưởng đến kích thước bộ nhớ làm việc. Thực tế là Java sử dụng ints cho mảng giới hạn kích thước của một mảng duy nhất nhưng một trừu tượng như bộ đệm nio có thể được sử dụng để làm việc hiệu quả xung quanh điều này. Vì đây không phải là hoàn hảo, có những kế hoạch để cho phép các chỉ mục được lâu dài. Tuy nhiên, nó không phải là một hạn chế trong một cách kỹ thuật như một đống tối đa 4Gb. –

1

Chúng tôi đã viết trực tiếp đến 64bit và tôi có thể thấy không có hành vi tiêu cực ...

3

trình tốt cho chúng ta. Tại sao bạn không chỉ đơn giản là cố gắng thiết lập nó và chạy bộ thử tải của bạn theo một hồ sơ như jvisualvm?

9

Tóm lại: JVM 64-bit sẽ tiêu thụ bộ nhớ hơn cho đối tượng tham chiếu và một vài loại khác (nói chung là không đáng kể), tiêu thụ bộ nhớ hơn cho mỗi thread (thường đáng kể trên các trang web có dung lượng lớn) và cho phép bạn có đống lớn hơn (thường chỉ quan trọng nếu bạn có nhiều đối tượng tồn tại lâu dài)

Còn Đáp/bình luận:

  • Các bình luận rằng Java là 32-bit bởi thiết kế là sai lầm. Java giải quyết bộ nhớ là 32 hoặc 64 bit, nhưng thông số VM đảm bảo rằng hầu hết các trường (ví dụ: int, long, double, , v.v.) giống nhau bất kể.

  • Ngoài ra - điều chỉnh GC bình luận trong khi thích hợp cho nhiều đối tượng, có thể không có liên quan, GC có thể nhanh chóng trên JVM với đống lớn (Tôi đã làm việc với đống lên đến 15GB, với rất GC nhanh chóng) - nó phụ thuộc nhiều hơn vào cách thức bạn chơi với các chương trình thu thế hệ, và mẫu sử dụng đối tượng của bạn là gì. Trong khi ở những người trong quá khứ đã dành rất nhiều năng lượng các thông số điều chỉnh, nó rất khối lượng công việc phụ thuộc, và hiện đại (Java 5+) JVMs rất tốt tại tự điều chỉnh - trừ khi bạn có nhiều dữ liệu hơn có khả năng gây hại cho chính bạn hơn là giúp đỡ với điều chỉnh JVM tăng cường.

  • Như đã đề cập trên kiến ​​trúc x86, 64-bit EMT64 hoặc x64 vi xử lý cũng bao gồm hướng dẫn mới cho điều làm như viết nguyên tử, hoặc tùy chọn khác cũng có thể ảnh hưởng ứng dụng hiệu suất cao.

+0

Bạn có thể giải thích ý bạn là gì bởi "các trường (ví dụ: int, long, double, etc.) có giống nhau không"? – Pacerier

1

Đồng ý lấy khối lượng công việc JVM 32 bit và đặt chúng trên 64 bit tạo hiệu suất và không gian đạt được trong trải nghiệm của tôi. Tuy nhiên, hầu hết các nhà cung cấp JVM lớn giờ đây đã triển khai một công nghệ tốt về cơ bản nén một số đống - nó được gọi là các tham chiếu nén hoặc các vòng nén cho các JVM 64 bit không "lớn" (ví dụ: trong 4). -30gb phạm vi).

Điều này tạo ra sự khác biệt lớn và nên thực hiện chuyển đổi 32-> 64 tác động thấp hơn nhiều.

Tham chiếu cho JVM của IBM: link text

+0

Tôi nghĩ đây là -XX: + UseCompressedOops dành cho oracle jvm – Karussell

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