GraalVMクイックリファレンス【訳】

7565 ワード

前言
GraalVMは開発者がJavaをよりよく使うことを助けることができ、主に3つの方面を含む.
  • 最先端のJITコンパイラを使用することで高速化、
  • は、それらをインスタント起動および低メモリ消費のバイナリ実行可能ファイルにコンパイルし、
  • .
  • は、サポートされている多言語またはコードを使用してプログラミングされます.

  • このクイックリファレンスは、GraalVMが何ができるか、およびその機能を説明するためのキーオプションとコマンドの簡単な要約です.
    GraalVMクイックリファレンス(印刷はハイビジョンpdfを使用してください)
    A 4用紙にダウンロードして印刷し、オフィスに掛けて、GraalVMが何ができるか、どのような構成オプションがあるかを注意することができます.pdfバージョンを使用して印刷する必要があります(HDは符号化されていません).プリンタがアメリカのアルファベット紙のフォーマットに適している場合は、このバージョンのPDFを使用してください.
    この記事では、リファレンスの情報をすばやく参照し、詳しく説明します.
    一、javaアプリケーションの実行
    第1部では、Javaアプリケーションの実行に重点を置きます.まず、GraalVMインストールパッケージにはJDKが含まれていることを覚えておいてください.これは、GraalVMをJDKとして使用できることを意味します.たとえば、javacを使用してJavaソースコードをコンパイルします.
    javac MyApp.java

    もちろん、GraalVMを使用してJavaアプリケーションまたは他のJVM言語を実行することもできます.Javaを実行できるほか、GraalVMの強力なインスタント(JIT)コンパイラのおかげで、通常、他のjdkよりも高速に実行される最先端のピークパフォーマンスが得られました.
    java -jar MyApp.jar

    GraalVMを使用してJavaアプリケーションを実行する場合、最下位のJVMはJava Hotspot VMを使用します.これは、ほとんどの構成オプションが同じであることを意味します.たとえば、アプリケーションクラスパスをこのように指定できます.
    java -cp target/myapp.jar com.example.Main

    GraalVMコンパイラは通常プリコンパイルをネイティブ共有ライブラリモードで実行にありますが、そのコードはJavaで記述されており、JARファイルとして使用することができます.これにより、スタックメモリを使用してコンパイルすると、長い予熱を代価として使用されます(たとえば、コンパイラのJavaコードはコンパイルする必要があります).次のオプションを使用して、実行するモードを設定します(デフォルトではオンです).
    -XX:+-UseJVMCINativeLibrary

    コンパイラをJARまたはnativeライブラリとして実行するほか、予熱速度を速めるために構成の最適化economyを指定し、enterpriseを選択して最適なピークパフォーマンスを得ることもできます(もちろんGraalVMエンタープライズ版が必要です).
    -Dgraal.CompilerConfiguration=enterprise|community|economy

    JITコンパイラはアプリケーションを大幅に高速化する可能性がありますが、コンパイラが正常に動作しているかどうか、コードが本当に最上位に到達しているかどうか、コンパイラに到達する方法が分からない場合があります.コンパイルログを開くことができます.
    -Dgraal.PrintCompilation=true

    ログを表示するだけでなく、より多くのデバッグ出力を有効にすることもできます.たとえば、印刷コンパイラのグラフィックで分析して、より多くの最適化スペースを探すことができます.
    -Dgraal.Dump=:2

    もちろん、JVMの他の特性はGraalVMにも適用されます.たとえば、コードを命令挿入したり、実行時にクラスを生成したり、他のJava agent機能を生成したりするJava agentを追加できます.Javaベースのagentもnative agentも実行できます.1つの典型的な例はnativeイメージ構築を簡略化するための補助構成agentである.
    -javaagent:path/to/jar.jar
    -agentlib:path/to/native/agent

    二、バイナリ実行可能ファイルにコンパイル
    GraalVMを使用する第2の主な利点は、アプリケーションを事前にバイナリファイルにコンパイルするNative Image機能です.これを使用するには、native-imageコンポーネントをインストールする必要があります.一般的には、GraalVMリリース用にコンポーネントJARファイルをダウンロードし、次のコマンドを実行します.
    gu install -L native-image.jar

    次に、インストールされたnative-imageコンポーネントを使用して、アプリケーションのバイナリファイルを生成できます.
    native-image [options] MyClass

    または、javaコマンドと同様のJARファイル構文を使用できます.
    native-image -jar MyApp.jar

    生成されたバイナリ・ファイルを直接実行します.
    ./myApp

    実行可能ファイルを構築したくない場合、共有ライブラリを構築したい場合は、--sharedオプションを使用します.@CEntryPoint注釈タグを使用して公開する方法が必要ですが、このトピックに関するより詳細な検討は本明細書の範囲を超えています.
    --shared

    もう1つの非常に有用な方法は、静的リンクを構築するバイナリファイルであり、例えばlibcのようなオペレーティングシステムライブラリを実行可能ファイルにリンクすることである.どのlibc実装を使用するかを選択することもできます.デフォルトではglibcを使用します.muslcはオプションです.そのため、構築環境を構成する必要があります.
    --static --libc=muslc

    三、多言語プログラミング
    Truffle-based言語ベースのインフラストラクチャ:JavaScript、Ruby、Python、Rなどを実行できます.これには、言語の解釈器、Truffleフレーム、JITコンパイラが含まれるため、実行時にコードをコンパイルして実行速度を速めることができます.
    たとえば、各言語には次のようなサポートが含まれます.
    --language:js
    --language:python
    --language:llvm
    --language:ruby

    もう一つの魅力的な機能はnative image実行可能ファイルのプロファイルブートの最適化です.検出されたバイナリファイルを生成し、それに関連するワークロードを適用し、JITに類似した実行コードのプロファイルを記録し、これらのプロファイルを使用して本番バイナリファイルを構築することができます.
    native-image — pgo-instrument MyApp
    ./myApp
    native-image — pgo profile.iprof MyApp

    また、本nativeイメージの生成中に発生した状況をより明確に理解したい場合は、例えば、クラスの初期化のクラスチェーンを理解してみると、いくつかの有用なオプションを使用することができます.
    次のオプションを使用して、クラスを追跡する初期化パスをオンにします.
    -H:+TraceClassInitialization=package.class.Name

    native image構築はJavaプロセスなので、コードにブレークポイントを打って、コードデバッガを通じて、より詳細を全面的に知ることができます.
    --debug-attach=[port]

    このほかにもnativeイメージの構築と実行時の動作を構成するための他の有用なオプションがたくさんあります.今後、これらの構成項目について検討します.ヘルプを使用して、使用可能な情報を理解することもできます.
    --expert-options-all

    GraalVMの3番目の主な利点は、GraalVMのJavaScriptエンジンから電力を供給するNode.jsプラットフォームを含む多くの言語を実行できる多言語ランタイムです.したがって、nodeアプリケーションがある場合は、nodeコマンドを呼び出すことで実行できます.
    node myApp.js

    このほかにも、サポートプログラムの実行に使用できる言語イニシエータがたくさんあります.
    js myApp.js
    graalpython myApp.py
    ruby myApp.rb
    R myApp.r
    lli myApp

    デフォルトでは、nodeを含むイニシエータはnativeモードで実行され、解釈器はnative imageバイナリファイルにコンパイルされます.したがって、Javaクラスを使用してJVMと相互運用するには、--jvmオプションを使用します.他の言語では、--polyglotを使用します.
    --polyglot --jvm

    言語エンジンには、生産資源の制限などの多くの機能があります.たとえば、言語コンテキストが実行できる時間(ミリ秒):
    --sandbox.MaxCPUTime=Nms

    四、汎用開発ツール
    最後に重要な点は、GraalVM言語サポート汎用開発ツールが開梱されていることです.これはGraalVMエコシステム全体で最も興奮する部分の一つです.言語の意味を修復するために言語解釈器を実現し、強力な仮想マシン、GCアルゴリズムのセット、デバッガ、アナライザ、メモリアナライザ、その他の無料ツールを得ることができます.
    Chrome DevToolsデバッガ、サンプリングプローブ、トレースプローブ、およびメモリアナライザに基づくデバッガをそれぞれ有効にするには、次のオプションを指定します.
    --inspect
    --cpusampler
    --cputracer
    --memsampler

    結論
    GraalVMは多機能のプロジェクトで、多くの面白い機能を提供しています.これらの機能をあなたのアプリケーションに使用することができます.Java、JVM言語、JavaScript、Ruby、Python、Rなどをサポートします.
    より良いインスタントコンパイラの使用から、アプリケーションの実行可能ファイルの構築、コンポーネントの異なる言語での実行まで、GraalVMを使用できます.
    この短いリファレンス記事では、GraalVMの異なる機能の最も一般的なオプションを要約しようとしています.
    GraalVMをダウンロードしてPDFをすばやく参照し、印刷して壁に釘付けにします.現在機能のほんの一部しか使用されていない場合でも、GraalVMプロジェクトがどんなに面白いかを絶えず注意することができます.
    この機能を実行するとき、GraalVMのダウンロードはJavaアプリケーションをより速く実行したり、native imagesを使用してマイクロサービスをクラウドに近づけたり、他の言語のライブラリを使用してアプリケーションを強化したりするなど、クイックリファレンスからいくつかのことを試みます.
    訳者注
    mica如夢技術、PIG冷冷、JustAuth亜東、呉天狗
    原文リンク:https://medium.com/graalvm/graalvm-quick-reference-b8d1dfe24241
    訳者は
    GraalVMは間違いなくJavaの未来(5~10年)の大きな方向であり、Spring Boot 3とSpring Framework 6によるGraalVMの内蔵サポートを期待している.