検索
ニュース

Javaの「いま」を見る 人気バージョン、ベンダー、新しい動きは? New Relic年次調査コンテナ化、GCの利用状況を調査

New Relicは「2023 State of the Java Ecosystem Report」を発表した。Javaシリーズで採用率の高いバージョン、人気ベンダー、コンテナ化、ガベージコレクションの利用状況を解説した。

Share
Tweet
LINE
Hatena

 New Relicは2023年4月28日(米国時間)、Javaエコシステムの状況を調査した「2023 State of the Java Ecosystem Report」を発表した。Javaシリーズで採用率の高いバージョン、人気ベンダー、コンテナ化、ガベージコレクションの概況を解説した。同調査のデータは、2023年1月にNew Relicに報告されたアプリケーションを元にしている。

採用率トップはJava 11、Java 17は1年で430%増加

 Javaには2〜3年ごとにリリースされる長期サポート版(以後、LTS)と、短期間しかサポートされないものの、半年ごとに新しいバージョンを利用できる非LTSの2種類がある。

 実運用で最も使用されているバージョンはJava 11で、56%以上のアプリケーションで使用されている。2番目に多かったのはJava 8だった(33%)。実運用で使用されているアプリケーションのほとんどがJava 11とJava 8で占められる。

Java LTS バージョン別ユーザー採用率(提供:New Relic)
Java LTS バージョン別ユーザー採用率(提供:New Relic)

 2021年にリリースされたJava 17は、ユーザー採用率が9%未満だが、1年で430%の成長率を見せ、Java 11をしのぐ速さで普及している。

 実運用での非LTSバージョンの採用は非常に低く、非LTSを使用するアプリケーションは、全体でも1.6%にとどまり、2022年と比較しても低下している。背景には、サポートの問題だけでなく、LTSバージョンのリリースタイミングが短縮されている点もある。

非LTSバージョン別ユーザー採用率(提供:New Relic)
非LTSバージョン別ユーザー採用率(提供:New Relic)

 使用されている非LTSバージョンでユーザー採用率が最も高いのは、Java 14で、2番目がJava 15だった。

JDKベンダーはAmazonが人気

 従来、多くの開発者がOracleからJava Developer Kit(JDK)を取得しており、OracleはJava市場の約75%を占めていた。しかし、Javaのオープンソース化に伴い、選択肢が広がった。

 劇的な増加を見せたのがAmazonで、2023年に逆転、市場の31%を占めるようになった。

2022年〜2023年のJDKベンダー別市場占有率(提供:New Relic)
2022年〜2023年のJDKベンダー別市場占有率(提供:New Relic)

アプリケーションのコンテナ化が主流に

 New Relicに報告されたJavaアプリケーションのレポートのうち、70%以上がコンテナ上で実行されている。

 コンテナは、技術チームが計算とメモリのリソースを割り当てる方法に影響を与える。New Relicのデータでは、コンテナ内で実行されるアプリケーションの多くは4未満のコアで実行されている。

コンテナの内(緑)と外(青)で実行されるJavaアプリケーションのコア数別割合(提供:New Relic)
コンテナの内(緑)と外(青)で実行されるJavaアプリケーションのコア数別割合(提供:New Relic)

 コンテナ内のシングルコア設定は36%で2022年の42%から減少した。中でも8つのコア設定を使用するアプリケーションは、2022年の20%から29%以上に上昇している。

 開発チームの多くがコンテナを頻繁にデプロイするクラウド環境では、計算リソースをより小規模に設定する傾向がある。しかし、シングルコアからマルチコアへの移行が増えているのは、小規模な設定だとアプリケーションによっては予期しない問題を引き起こすからだと考えられる。シングルコアで実行されている場合、ガベージコレクタを設定していても取得できない可能性がある。

 コンテナ内のメモリ設定に関しても同様の傾向が見られ、実行されるコンテナ内でのインスタンスが小さくなる傾向が見られる。コンテナを展開する性質上、デプロイ時にリソースの制限を設けることが一般的であり、開発チームはアプリケーションのフットプリントを意識しながら開発を進める必要がある。

コンテナ内(緑)外(青)で実行されるヒープサイズ別のJVM(Java仮想マシン)メモリ設定の割合(提供:New Relic)
コンテナ内(緑)外(青)で実行されるヒープサイズ別のJVM(Java仮想マシン)メモリ設定の割合(提供:New Relic)

 Java 9ではコンテナでより適切に動作するための多くの機能が導入された。一例をあげると、-Xmxを使用して正確なヒープサイズを指定する代わりに-XX:MaxRAMPercentageが導入された。JVMはコンテナのメモリ制限を認識しているため、-XX:MaxRAMPercentageはJVMをコンテナサイズに簡単にスケーリングできる。New Relicのデータによると、コンテナ化されたアプリケーションの30%が-XX:MaxRAMPercentageを使用している。この割合は2022年の9%から大きく増加している。

ガベージイン/ガベージアウト

 自動ガベージコレクションは、ヒープメモリを調べ、どのオブジェクトが使用され、どのオブジェクトが使用されていないかを特定し、未使用のオブジェクトを削除するプロセスだ。JVMのパフォーマンスにおいて中心的な役割を担っている。

Javaバージョン別ガベージコレクタ使用率(提供:New Relic)
Javaバージョン別ガベージコレクタ使用率(提供:New Relic)

 New Relicのデータでは、Java 11以降のユーザーの65%がガベージ1(G1)を利用している。G1のメリットとして、大きな領域を一度にクリアするのではなく、小さな領域をクリアしながら収集プロセスを最適化する点がある。そのため実行中にフリーズすることもほとんどなく、新旧オブジェクトの両方を同時に収集できる。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る