2012-12-13 27 views
7

Tôi đã chơi với Java 7 update 9 trên mac một chút và tìm thấy một điều thú vị.Java 7 và JavaVM.framework trên mac

Tôi vừa chạy một chương trình Java đơn giản với JFrame và đính kèm với lldb. Sau đó, tôi đã kiểm tra các thư viện được tải bởi chương trình Java này và tôi đã thấy:

"/System/Library/Frameworks/JavaVM.framework/JavaVM" trong đó.

Vì vậy, tôi có 2 câu hỏi:

  1. gì JavaVM này làm cho Java 7? Tôi nghĩ rằng Java 7 trên mac là tự nhất quán giống như các phiên bản tương ứng của nó trên Windows và Linux. Bằng cách sử dụng "nm", tôi có thể thấy JavaVM này đã định nghĩa nhiều hàm như JNI_CreateJavaVM, cũng được định nghĩa trong libjvm.dylib.

  2. Tôi nên liên kết những gì với thư viện JNI bằng Java 7? vẫn còn JavaVM.framework? Tôi có thể liên kết với các thư viện nằm dưới

    /Library/Java/JavaVirualMachine/jdk.1.7.0 trực tiếp.

Mọi trợ giúp sẽ được đánh giá cao.

+0

bản sao có thể có của [Cần trợ giúp tìm hiểu Java của Java trên Mac] (http://stackoverflow.com/questions/15120745/need-help-understanding-oracles-java-on-mac) – BryanH

Trả lời

0

Đối với phần đầu tiên, JavaVM trỏ tới Mac JavaMM (1.6). Xem xét kỹ hơn các tệp Info.plist, có vẻ như Mac Java hỗ trợ JNI (trong số những thứ khác), trong khi Java Java chỉ hỗ trợ CommandLine. Nó không giống như bạn có thể liên kết đến 1.7 trên Mac OS X. Có rất nhiều câu hỏi liên quan, quá.

Để tìm JVM của bạn có hỗ trợ JNI, làm điều này:

/usr/libexec/java_home -t JNI 

này có lẽ nên trả lại 1.6.0 JDK. Bạn có thể chạy nó với đối số -V để có được một danh sách đầy đủ về những JVM nào có sẵn.

+0

Chúng tôi sử dụng JNI mọi lúc Oracle 1.7. Bạn có nghĩa là chỉ gọi _into_ java, có lẽ? – bmargulies

+0

@bmargulies trên Mac OS X? Và nó không sử dụng 1,6? – Matt

+0

Có thực sự tôi làm. – bmargulies

0

Oracle JDK trên máy Mac được quảng cáo giống như Oracle JDK ở mọi nơi khác. Nó có lệnh, tiêu đề và lib. Bạn sẽ có thể sử dụng các nội dung của JDK chỉ bạn sẽ ở nơi khác. Chúng tôi thường tạo và sử dụng các thư viện JNI được tải bằng LoadLibrary; Tôi không thể báo cáo trải nghiệm cá nhân với giao diện gọi.