検索
ホームページJava&#&チュートリアルQuarkus と GraalVM ネイティブ イメージを使用して Java マイクロサービスをターボチャージする

現代のソフトウェア開発のダイナミックな状況において、マイクロサービスはアーキテクチャ上のアプローチとして好まれています。この方法論には多くの利点がありますが、課題がないわけではありません。従来の JVM ベースのサービスには、メモリ使用量の多さ、起動時間の延長、CPU 使用率の高さなどの問題が伴うことがよくあります。これらの課題は技術的な側面に影響を与えるだけでなく、ソフトウェア ソリューションの実行と保守の全体的なコストに大きな影響を与える可能性がある財務上の影響も及ぼします。

GraalVM ネイティブ イメージとは何ですか?

GraalVM ネイティブ イメージは GraalVM の重要な機能であり、さまざまなプログラミング言語と実行モードのサポートを提供する高性能ランタイムです。具体的には、GraalVM Native Image を使用すると、Java アプリケーションを事前にコンパイルしてスタンドアロンのネイティブ実行可能ファイルにし、実行時に Java 仮想マシン (JVM) を使用する必要がなくなります。この革新的なアプローチにより、従来の JVM に比べて起動時間がほぼ瞬時に短縮され、メモリ消費量が大幅に削減された実行可能ファイルが生成されます。これらのネイティブ実行可能ファイルは細心の注意を払って作成されており、アプリケーションの機能に不可欠な必須のクラス、メソッド、および依存ライブラリのみが含まれています。 GraalVM Native Image は、その技術的能力を超えて、広範囲に影響を与える戦略的ソリューションとして浮上しています。技術的な課題を克服するだけでなく、説得力のある財務上の事例も紹介します。 GraalVM は、効率的で安全かつ即座にスケーラブルなクラウド ネイティブ Java アプリケーションの開発を促進することで、リソース使用率の最適化と費用対効果の促進に役立ちます。本質的に、これは現代の動的な環境におけるソフトウェア ソリューションのパフォーマンスと財務効率を向上させる上で極めて重要な役割を果たします。

技術的な課題と財務上の影響

1.大きなメモリ使用量

技術的影響
従来の JVM ベースのサービスでは、クラスロードとロードされたクラスのメタデータにより、多くの場合、大量のメモリ オーバーヘッドが発生します。


金融事件
メモリの消費量が多いと、インフラストラクチャのコストが増加します。 GraalVM では、ロードされたクラスのメタデータやその他の最適化が不要になるため、リソースがより効率的に使用され、潜在的なコスト削減につながります。

2.開始時間の延長

技術的影響
マイクロサービスでのコールド スタートは応答時間の増加につながり、ユーザー エクスペリエンスに影響を与え、サービスの低下を引き起こす可能性があります。


金融事件
開始時間の延長はユーザーの満足度に影響を与えるだけでなく、運用コストの増加にもつながります。クラスローディングのオーバーヘッドの排除やビルド中のイメージ ヒープの事前生成などの GraalVM の最適化により、起動時間が大幅に短縮され、運用コストが最小限に抑えられる可能性があります。

3. CPU 使用率が高い

技術的影響
従来の JVM は、起動時にプロファイリングやジャストインタイム (JIT) コンパイルのために CPU サイクルを消費することがよくあります。


金融事件
CPU 使用率が過剰になると、クラウド インフラストラクチャのコストが増加します。 GraalVM によるプロファイリングと JIT のオーバーヘッドの回避は、CPU 消費量の削減に直接貢献し、クラウド使用における潜在的なコスト削減につながります。

コールドスタート問題への取り組み

マイクロサービス、特にサーバーレスまたはコンテナ化された環境では、コールド スタート問題に直面することが多く、応答時間とユーザー エクスペリエンスに影響を与えます。 GraalVM は、いくつかの最適化を実装することでこの課題に対処します。

1.クラスロードのオーバーヘッドなし

従来の Java アプリケーションは、実行時のクラスロードに依存して、クラスを動的にロードしてリンクします。このプロセスでは、特に起動段階でオーバーヘッドが発生します。 GraalVM は、静的コンパイルまたは事前 (AOT) コンパイルと呼ばれるプロセスを通じて、このオーバーヘッドを最小限に抑えます。これには、アプリケーションに必要なすべてのクラスの事前ロード、リンク、および部分的な開始が含まれます。その結果、アプリケーションの起動時にランタイム クラスロードが必要なくなります。

2.解釈されたコードの削除

従来の Java 仮想マシンは、ジャストインタイム (JIT) コンパイルを適用する前に、解釈された実行モードに依存します。これにより、起動の遅延や CPU 使用率の増加が発生する可能性があります。ネイティブ実行可能ファイルには解釈されたコードが含まれていないため、起動時間の短縮にさらに貢献します。

3.プロファイリングと JIT のオーバーヘッドなし

GraalVM は、ジャストインタイム (JIT) コンパイラーを起動する必要を回避し、起動時の CPU 使用率を削減します。

4.ビルド時のイメージ ヒープ生成

GraalVM のネイティブ イメージ ユーティリティを使用すると、ビルド プロセス中に特定のクラスの初期化プロセスを実行できます。これにより、事前に初期化された部分を含むイメージ ヒープが生成され、アプリケーションの起動が高速化されます。

Oracle GraalVM のネイティブ イメージ ユーティリティは、従来の JVM ベースのアプリケーションよりも起動時間がほぼ 100 倍速いことが実証されています。以下のグラフは、ランタイム メモリ要件の大幅な削減を示し、HotSpot と比較した GraalVM の効率を示しています (図 1)。

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

図 1 – ネイティブ実行可能ファイルはほぼ瞬時に起動します (oracle.com)


メモリ使用量の削減を実現

GraalVM は、次の最適化を通じてメモリ フットプリントの削減に貢献します。

1.ロードされたクラスにメタデータがありません

GraalVM は、動的にロードされたクラスのメタデータを非ヒープ メモリに保存することを回避します。ビルド プロセス中に、必要なクラス情報が事前にロードされてリンクされるため、実行時の追加のメタデータの必要性が最小限に抑えられます。

2.プロファイリング データまたは JIT 最適化なし

バイトコードはすでにネイティブ コード内にあるため、GraalVM では JIT 最適化のためのプロファイリング データを収集する必要がなくなり、メモリのオーバーヘッドが削減されます。

3.絶縁技術

GraalVM は、ヒープをより小さな独立した「ヒープ」に分割するテクノロジーである Isolates を導入し、特にリクエスト処理シナリオの効率を高めます。

一般に、JVM で実行する場合と比較して、メモリ消費量が最大 5 倍少なくなります (図 2)

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

図 2 – Go または Java HotSpot(oracle.com) と比較したネイティブ実行可能ファイルのメモリ


結論として、GraalVM のネイティブ イメージ ユーティリティは、マイクロサービスによってもたらされる課題に対する革新的なソリューションを提供し、起動時間、メモリ フットプリント、CPU 使用率の問題に対処します。 GraalVM を採用することで、開発者は効率的で安全なだけでなく、優れたユーザー エクスペリエンスを提供するクラウドネイティブ Java アプリケーションを作成できます。

Quarkus を使用したネイティブ Java

Quarkus サービスをネイティブ イメージにコンパイルするには、さまざまな方法が利用できます。この記事では、Quarkus ネイティブのビルド手順については深く掘り下げませんが、重要な手順の概要を説明します。

ネイティブ イメージの構築方法に進む前に、pom.xml ファイルに適切なネイティブ プロファイルを設定することが重要です。次のプロファイルを追加します:

<profiles>
  <profile>
    <id>native</id>
    <properties>
      <quarkus.package.type>native</quarkus.package.type>
    </properties>
  </profile>
</profiles>

インストールされた GraalVM を使用したネイティブ実行可能ファイルの作成

次のコマンドを使用して GraalVM のバージョンを確認します:

./gu info native-image

このコマンドは、インストールされている GraalVM のバージョンを表示します:

Downloading: Component catalog from www.graalvm.org
Filename : https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.0/native-image-installable-svm-java19-linux-amd64-22.3.0.jar
Name     : Native Image
ID       : native-image
Version  : 22.3.0
GraalVM  : 22.3.0
Stability: Experimental
Component bundle native-image cannot be installed
        - The same component Native Image (org.graalvm.native-image[22.3.0.0/55b341ca1bca5219aafa8ed7c8a2273b81d184dd600d8261c837fc32d2dedae5]) is already installed in version 22.3.0

ネイティブ実行可能ファイルを作成するには、次を使用します:

./mvnw install -Dnative

これらのコマンドは、ターゲット ディレクトリに *-runner バイナリを生成し、ネイティブ実行可能ファイルを実行できるようにします。

./target/*-runner

GraalVM をインストールせずにネイティブ実行可能ファイルを作成する

GraalVM をローカルにインストールすることが困難な場合は、コンテナ内ビルドを使用できます。

./mvnw install -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=graalvm

このコマンドは、Docker コンテナ内でビルドを開始し、必要なイメージ ファイルを提供します。その後、次のコマンドでアプリケーションを起動できます:

./target/*-runner

ネイティブ イメージの構築が困難であることが判明した場合、RedHat チームは、Mandrel と呼ばれる Quarkus フレームワーク用に設計された GraalVM の特殊なディストリビューションを提供します。マンドレルの流線型
GraalVM は、Quarkus アプリケーションに不可欠なネイティブ イメージ機能のみに焦点を当てています。マンドレルを使用するには、次の手順に従います:

  1. 適切な Mandrel バージョンの Mandrel リポジトリを特定します

  2. application.properties ファイルで Mandrel のバージョンを設定します:

quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17

3.Maven ビルド コマンドを実行します:

./mvnw clean install -Pnative

コンテナを手動で作成する

コンテナ作成よりも手動で制御したい場合は、多段階の Docker ビルドを使用できます。

FROM quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17 AS build
COPY --chown=quarkus:quarkus mvnw /app/mvnw
COPY --chown=quarkus:quarkus .mvn /app/.mvn
COPY --chown=quarkus:quarkus pom.xml /app/
USER quarkus
WORKDIR /app
RUN ./mvnw -B org.apache.maven.plugins:maven-dependency-plugin:3.6.1:go-offline
COPY src /app/src
RUN ./mvnw package -Dnative

FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /app/
COPY --from=build /app/target/*-runner /app/application

RUN chmod 775 /app /app/application \
  && chown -R 1001 /app \
  && chmod -R "g+rwX" /app \
  && chown -R 1001:root /app

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

この Dockerfile は複数段階のビルドを調整し、Quarkus アプリケーションを含む Docker イメージを生成します。この Dockerfile を実行して Docker イメージを生成し、Quarkus アプリケーションを実行できるようにします。

まとめ

GraalVM Native Image は、Java マイクロサービスの開発とデプロイの方法に革命をもたらす強力なテクノロジーです。 GraalVM Native Image を採用すると、次のようなマイクロサービスを作成できます。

  • より速く
  • よりスケーラブルな
  • 導入が簡単
  • よりコスト効率が高い

GraalVM ネイティブ イメージは、クラウド ネイティブ Java 開発を実現する重要な要素であり、ビジネスが求めるパフォーマンス、スケーラビリティ、コスト削減の達成に役立ちます。

以上がQuarkus と GraalVM ネイティブ イメージを使用して Java マイクロサービスをターボチャージするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
プラットフォームの独立性のためにネイティブコードを介してbytecodeを使用することの利点は何ですか?プラットフォームの独立性のためにネイティブコードを介してbytecodeを使用することの利点は何ですか?Apr 30, 2025 am 12:24 AM

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは本当に100%プラットフォームに依存していませんか?なぜまたはなぜですか?Javaは本当に100%プラットフォームに依存していませんか?なぜまたはなぜですか?Apr 30, 2025 am 12:18 AM

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaのプラットフォーム独立性は、コードの保守性をどのようにサポートしますか?Javaのプラットフォーム独立性は、コードの保守性をどのようにサポートしますか?Apr 30, 2025 am 12:15 AM

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。

新しいプラットフォームのJVMを作成する際の課題は何ですか?新しいプラットフォームのJVMを作成する際の課題は何ですか?Apr 30, 2025 am 12:15 AM

新しいプラットフォームでJVMを作成することに直面する主な課題には、ハードウェアの互換性、オペレーティングシステムの互換性、パフォーマンスの最適化が含まれます。 1。ハードウェア互換性:JVMがRISC-Vなどの新しいプラットフォームのプロセッサ命令セットを正しく使用できるようにする必要があります。 2。オペレーティングシステムの互換性:JVMは、Linuxなどの新しいプラットフォームのシステムAPIを正しく呼び出す必要があります。 3。パフォーマンスの最適化:パフォーマンステストとチューニングが必要であり、ガベージコレクション戦略が新しいプラットフォームのメモリ特性に適応するように調整されます。

Javafxライブラリは、GUI開発におけるプラットフォームの矛盾にどのように対処しようとしていますか?Javafxライブラリは、GUI開発におけるプラットフォームの矛盾にどのように対処しようとしていますか?Apr 30, 2025 am 12:01 AM

javafxefcectivelyaddressessessistencisingisingidevidementsyusaplatform-agnosticscenegraphandcssstyling.1)itabstractsplatformspificsthroughascenegraph、Assuring-sunsinstentrenderingacrosswindows、macos、andlinux.2)

JVMがJavaコードと基礎となるオペレーティングシステムの間の仲介者としてどのように機能するかを説明します。JVMがJavaコードと基礎となるオペレーティングシステムの間の仲介者としてどのように機能するかを説明します。Apr 29, 2025 am 12:23 AM

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

Javaのプラットフォーム独立におけるJava Virtual Machine(JVM)の役割を説明します。Javaのプラットフォーム独立におけるJava Virtual Machine(JVM)の役割を説明します。Apr 29, 2025 am 12:21 AM

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

さまざまなオペレーティングシステムでJavaアプリケーションが正しく実行されるようにするために、どのような措置を講じますか?さまざまなオペレーティングシステムでJavaアプリケーションが正しく実行されるようにするために、どのような措置を講じますか?Apr 29, 2025 am 12:11 AM

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。