Loomについて聞きました。残念ながら、どちらもJava11には入らないので、LTSのリリースサイクルを考えるとまともにサービスで使えるのは早くて2021年...とはいえ、どちらもとても夢のある話でした。points;配列を作ると、各Pointインスタンス毎にヘッダを持ってしまい、大きなメモリのオーバーヘッドが発生します。yList;とプリミティブ変数の配列を宣言するのが最も良いのですが、これではせっかくのオブジェクト指向が台無し。これによって、省メモリ化に加えて、参照の高速化も図ることができるようになります。2017年11月12日ここまでは昨年のJavaDayTokyoでも既に紹介されていました。xList;要はプリミティブ型がほとんど普通のオブジェクトのように使えると。intStreamのような(普通のstreamと別にメソッドを用意しなくてはならないような)「ダサい」対応も不要になるとのことです。実用化には時間がかかりそうでした。実際の所、どのくらい使えるんだろう現実的な利用シーンを考えると、フィールドにプリミティブしか持たないクラスというのはあんまりない気も。StringやLocalDate系が混ざっていてもうまいこと扱っていただけるようになると良さそうなのですが。Loomこちらがタイトルの、”100万スレッド”です。現在のJVMでは、JVM上のスレッドは、OSが管理するスレッドとマッピングされています。それぞれのスレッドは、用途が異なるかもしれません。あるスレッドは複雑な暗号化に使われるかもしれないし、またあるスレッドは単に変数を一つ書き換えるだけの簡単な処理に使われるかもしれません。OSは、アプリケーションのコードを知らないため、各スレッドの用途もわかりません。そのため、どのスレッドも一律、「何にでも使えるスレッド」を用意することになります。ここで、「Fiber」という考え方が登場します。Fiberは、OSではなく、Javaのruntimeやユーザコードによって支配されるスレッド。アプリケーションはスレッドの用途を知っているため、無駄のないスレッドを効率的に作ることが可能です。その結果、OS管理のスレッドに比べてなんと1000倍ほど数のスレッドが作れるようになるとのこと。それだけOSが作るスレッドには「無駄」があるそうです。ブロッキングと非同期ちょうど一年前のJavaDayTokyoで聞いた話ですが、taichiw.hatenablog.comブロッキングな処理はスケールしにくい、という問題点があります。その対策として、非同期(ノンブロッキング)に処理を制御する、という方法があるものの、プログラミングやデバッギングが難しい、という問題があります。この双方の問題を解決するのがFiber.スレッドモデル(=ブロッキングな処理)であるため取扱が簡単であるにもかかわらず、スケーラビリティに優れるという夢のようなお話です。言ってることが未来Fiberはスレッドなので、「どんな処理が」「どこまで進んだか」が管理されています。他方、JVM上で管理されているオブジェクトなので、Serializeが可能とのこと。その結果何ができるようになるかと言うと...実行中のスレッドをSerializeして保存。分散データベースに於いて、「処理を他のサーバに転送」と言ったことができるようになるとのこと。実際の所、まだまだ開発が始まったばかりでCommitもないとか。