Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java Interoperating with Golang V2 

Java Interoperating with Golang V2 

GraalVM
JNI
JDK 13 Panama( new!!!)

swt02026

May 28, 2019
Tweet

More Decks by swt02026

Other Decks in Programming

Transcript

  1. Java Native Interface 原理 • 撰寫 C 程式,將 JNI 與

    cgo 產生 Library 包裝 優點 • 相關教學資源多 • Android 也適用 缺點 • 需要寫 C 、Java、Go • 產生的中介檔多
  2. GraalVM Native-Image 原理 • 把 Java 程式編譯成 Native Binary,與 cgo

    Library 進行 Linkage 缺點 • 編譯時間長,產生的執行檔很肥 • JVM 的功能無法完全取代 • Java 程式需要提供編譯器相關資訊 • 目前只提供 Java 8 的語法 • Android 尚未支援 優點 • 不用 JVM 就能執行 • 只需要寫 Java 、Go
  3. GraalVM sulong + llgo 原理 • 用 llgo 將 Go

    程式編譯成 LLVM bitcode • 使用 GraalVM sulong 執行 LLVM bitcode 缺點 • llgo 已經五年沒維護,沒安裝成功.... • 可能會遇到 bitcode 版本相容問題 • Java 程式中要處理 bitcode Lifecycle • 編譯時期 Go 與 Java 產生檔案沒有直接相依,不易偵錯
  4. JDK 13 Panama 原理 • 使用 jextract 工具,將 Header 與

    Library 相關資訊包裝成 Java Package 優點 • Java 程式只需 Import Package 就可以使用 • 未來會取代 Java Native Interface,Android 不確定 缺點 • 目前文件很少 • 產生的 Java Package 資訊不透明,decompile 才能了解如何使用