2010-08-10 43 views
5

Vài câu hỏi :):Lập trình Java cho JVM 64 bit

Cách xác định JVM nào hiện đang được cài đặt? (64 bit/32 bit)

Tôi có cần thực hiện một số cân nhắc khi lập trình cho Nền tảng mục tiêu JVM 64 bit không?

Mã Java của tôi có thể hoạt động trên 32 bit cũng như JVM 64 bit không?

Làm thế nào để chạy Ứng dụng Java của tôi trên JVM 64 bit?

Cách xác định JVM nào đang được sử dụng cho Ứng dụng Java của tôi?

+1

Không phải là toàn bộ điểm của máy ảo * mà kiến ​​trúc được triển khai không quan trọng? – Ken

+2

Không, nếu bạn cần thư viện SWT để có thể chạy. –

Trả lời

10

Thông thường một jvm 64 bit sẽ tự xác định như vậy.

32/64 bit cân nhắc tôi đã thấy: không gian

  1. địa chỉ - nếu bạn không mong đợi để giải quyết hơn là 1,3GB bộ nhớ thì bạn sẽ không thấy sự khác biệt
  2. thư viện bản địa - nếu bạn đang tải bất kỳ thư viện JNI nào, thì chúng sẽ cần phải khớp với kiến ​​trúc máy ảo của bạn. Ví dụ: không thử tải các thư viện gốc 32 bit từ vm 64 bit (không có loại -32 cờ)

Có, cùng mã sẽ chạy trên cả hai JVM.

Thuộc tính hệ thống "sun.arch.data.model" có cờ 32/64 tôi nghĩ.

Có một số thông tin hữu ích ở đây: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

+1

Lưu ý rằng sun.arch.data.model không chuẩn, vì vậy việc triển khai JVM không có mặt trời có thể không cung cấp thuộc tính hệ thống đó. Thuộc tính hệ thống os.arch là thuộc tính hệ thống tiêu chuẩn, nhưng bạn có thể phải phân tích nó. Kiểm tra xem liệu os.arch chứa các ký tự '64' có hoạt động hay không. –

+0

@jowierun "Thông thường một jvm 64 bit sẽ tự xác định như vậy." Nhưng khi tôi chạy cùng trên Solaris (nơi 32 bit cũng như 64 VM được cài đặt) nó luôn luôn mất 32 bit VM. – YoK

+1

@Sean Reilly nhưng trên máy Sparc 64 bit, tôi có thể chạy JVM 32 bit. Vì vậy, tôi không nghĩ os.arch sẽ giúp đỡ. – YoK

4

Trong mã Java của riêng bạn, bạn không cần phải làm bất cứ điều gì đặc biệt liên quan với tới 32 hoặc 64-bit. Không giống như ví dụ C và C++, một int trong Java luôn là 32 bit và long luôn là 64 bit (trong C và C++, kích thước của các kiểu đó phụ thuộc vào hệ thống).

Không có phiên bản Java bytecode 32 bit và 64 bit riêng biệt; bytecode là chính xác như nhau, bất kể thực tế là JVM bạn có thể đang chạy nó là 32-bit hoặc 64-bit. Bạn không phải biên dịch mã nguồn Java của mình một cách khác nhau cho 32-bit hoặc 64-bit. Đối với chức năng, nó không quan trọng đối với ứng dụng Java của bạn nếu nó chạy trên một JVM 32 bit hoặc 64 bit.

Có thể có một số khác biệt về kỹ thuật mà jowierun đã đề cập. Cũng có thể có sự khác biệt về hiệu suất; ví dụ: JVM 64 bit của Oracle cho Windows được điều chỉnh khác với JVM 32 bit, nó thực hiện các tối ưu hóa JIT khác. Tôi nhận thấy điều này bản thân mình với một ứng dụng tính toán chuyên sâu mà tôi đã viết gần đây; trên một JVM 64 bit, nó chạy nhanh hơn nhiều so với một JVM 32 bit. (Nhưng đó chỉ là một ví dụ, không coi đây là bằng chứng cho thấy bất kỳ chương trình nào chạy nhanh hơn nhiều trên một JVM 64 bit).

+1

Một trong những lý do mà JVM 64-bit x86 (và nhiều chương trình 64 bit khác) chạy nhanh hơn là vì nó có nhiều đăng ký để làm việc với http://www.oracle.com/technetwork/java/hotspotfaq-138619.html# 64bit_performance –

1

Bạn có những câu hỏi này về phía trước.

  1. Bạn không phải làm bất cứ điều gì trong mã Java của mình, mã sẽ chạy trên cả 32-nhưng và 64 bit.
  2. Do đó bạn không cần biết đó có phải là JVM 64 bit hay không.
+6

@downvoter: vui lòng giải thích. Những người không thích giải thích không giúp đỡ được bất cứ ai: họ không cho công chúng xem có vấn đề gì với câu trả lời và họ cũng không giúp đỡ người đăng. – EJP

+0

Tôi nghĩ rằng đó là vì bạn chỉ trả lời 20% câu hỏi. Bên cạnh đó, phần sau ** do đó ** là một giả định về phần của bạn – Pacerier

+0

@Pacerier Tôi mong đợi một downvote nếu có cái gì đó * không chính xác * ở đó, không chỉ cho một câu trả lời không đầy đủ. Nó có vẻ kỳ quặc với tôi. – EJP

2

Nếu bạn dự định viết mã gốc bằng giao diện Java Native (JNI), bạn phải cẩn thận hơn khi viết mã C thích hợp sẽ chạy trên cả máy 64 và 32 bit. Hãy chắc chắn rằng bạn sử dụng các loại Java thích hợp khi chuyển các đối số đến/từ mã java (JNI cung cấp một tập các kiểu gõ cho các loại java), đặc biệt khi chuyển đổi các mảng. Và khi kiểm tra mã nguồn gốc của bạn, kiểm tra trên cả hai kiến ​​trúc (-m32 sẽ buộc một vòm 32 bit trên GNU gcc) với các JVM khác nhau.

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