本記事は、2022年5月に開催されたTechFeed Conference 2022のセッション書き起こし記事
皆さん、こんにちは。Microsoftの寺田です。今日はJavaの最新動向についてご紹介していきたいと思います。どうぞよろしくお願いいたします。
まず最初にこちらをご覧ください。
2017年にJava 9をリリースして以降、Javaは半年に1度、アップデートするようになりました。
企業環境において、多くのJavaの利用者は、Java 11とかJava 17といったロングターム
次のLTSバージョンですが、来年9月にJava 21がリリースされる予定です。また、Java 21がリリースされる前にも、半年に1度、アップデートが行われます。
現在はJava 18がリリースされていますが、今年の9月には新しいJava 19というバージョンがリリースされる予定です。
私が今回注目をする
仮想スレッドは、非常に軽量で簡単に作成することができて、大量の処理で負荷のかかるようなアプリケーション、あとは並列処理などでとても大きな威力を発揮するのではないかと思います。
それでは、なぜこの仮想スレッドという軽量なスレッドが新機能として追加されているのかについて、これからご紹介していきたいと思います。
まずこちらをご覧ください。
今までのJavaのスレッドというものは、1つスレッドを生成するとネイティブ側のほうでも同じように1対1で対応するスレッドが生成されました。OSで管理するネイティブスレッドというものは、システムコールを呼び出して作成したり、スケジューリングをカーネル側でやったりと、けっこう負荷がかかるんですね。
それに1つスレッドを作ると、スタックでメモリを消費したり、あと CPU のコア数を超える大量にスレッドを作ると、スレッドをどのCPUコアで動かすのか、それを切り替えるためのコンテキストスイッチというものがたくさん発生します。
こういったことが、今まで起こっていたわけなんですが、今後どうなるのかというと、Javaの仮想スレッドというものをご利用いただくことで、Javaのバーチャルマシンの中でスレッドを作成したり管理できるようになります。つまりネイティブスレッドに比べて少ないメモリで高速にスレッドを作成することができます。
ですので、大量にリクエストが来るようなWebサーバの実装であったり、あとは pub/
まとめると、仮想スレッドは、多くの時間がブロックされてI/
Java 19のデモ
それでは、実際にJava19のデモを行っていきたいと思います。
実際にバーチャルスレッドを作成する方法はいろいろあるんですが、今回は、ふだん皆様がよくお使いいただいている、Executorサービスを使ってバーチャルスレッドを作っていきたいと思います。
newThreadPerTaskExecutor() というメソッドは、Java 19で追加されたメソッドなんですが、この中で仮想スレッドを作って実行します。具体的に何をやっているかと言うと、100万回ループを回して、その中でタスク毎に100万個のスレッドを作り、何らかの処理を実行するという処理を実装しています。
このメソッドを呼び出す際に使うThread.
それでは、まずThread.
OutOfMemoryエラーは十分なメモリがなくて、スレッドを作成できないということですが、実はメモリが足りていないわけではなく、OS 側で生成可能なスレッド数の上限を超えたために発生しています。このように100万個のOS のユーザ・
では今度はこれをバーチャルスレッド側で作ってみたいと思います。
Thread.
今回は時間の都合上、簡単な紹介になってしまいましたが、このJava 19で導入される仮想スレッドを利用することで、場合に応じて、非常に高いスループットが求められるようなサービスで活用していただくことができるかと思います。本当にこれは覚えておいて損はないAPIだと思いますので、ぜひぜひお試しください。
今日は本当にどうもありがとうございました。