タグ

ブックマーク / b.chiroito.dev (26)

  • 日本語訳:JEP 425 : Virtual Threads (Preview) Part 5 - #chiroito ’s blog

    個人的に気になっている Project Loom で Virtual Threads がプレビューされたので仕様である JEP を翻訳してみました。 ボリュームが多いため、いくつかのパートに分けて公開していきます。 原文はこちら:JEP 425: Virtual Threads (Preview) 全パートはこちら 日語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Previ

    日本語訳:JEP 425 : Virtual Threads (Preview) Part 5 - #chiroito ’s blog
    nobusue
    nobusue 2022/06/15
  • 日本語訳:JEP 425 : Virtual Threads (Preview) Part 4 - #chiroito ’s blog

    個人的に気になっている Project Loom で Virtual Threads がプレビューされたので仕様である JEP を翻訳してみました。 ボリュームが多いため、いくつかのパートに分けて公開していきます。 原文はこちら:JEP 425: Virtual Threads (Preview) 全パートはこちら 日語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Previ

    日本語訳:JEP 425 : Virtual Threads (Preview) Part 4 - #chiroito ’s blog
    nobusue
    nobusue 2022/06/11
  • 日本語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’s blog

    個人的に気になっている Project Loom で Virtual Threads がプレビューされたので仕様である JEP を翻訳してみました。 ボリュームが多いため、いくつかのパートに分けて公開していきます。 原文はこちら:JEP 425: Virtual Threads (Preview) 全パートはこちら 日語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Previ

    日本語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’s blog
    nobusue
    nobusue 2022/06/09
  • 日本語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog

    個人的に気になっている Project Loom で Virtual Threads がプレビューされたので仕様である JEP を翻訳してみました。 ボリュームが多いため、いくつかのパートに分けて公開していきます。スターやブコメが付くとモチベーションが上がるかもしれません。(上がらないかもしれません) 原文はこちら:JEP 425: Virtual Threads (Preview) 全パートはこちら 日語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’

    日本語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog
    nobusue
    nobusue 2022/06/09
  • 日本語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog

    個人的に気になっている Project Loom で Virtual Threads がプレビューされたので仕様である JEP を翻訳してみました。 ボリュームが多いため、いくつかのパートに分けて公開していきます。スターやブコメが付くとモチベーションが上がるかもしれません。(上がらないかもしれません) 原文はこちら:JEP 425: Virtual Threads (Preview) 全パートはこちら 日語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 2 - #chiroito ’s blog 日語訳:JEP 425 : Virtual Threads (Preview) Part 3 - #chiroito ’

    日本語訳:JEP 425 : Virtual Threads (Preview) Part 1 - #chiroito ’s blog
    nobusue
    nobusue 2022/06/03
  • Rediness Probeでアプリケーションが十分にJITされたことを検知する - #chiroito ’s blog

    どうも、趣味でOpenJDKのコミッタをやってます。JVMの専門家ではないです。 今回はJITコンパイルによる暖気が十分に行われてから処理を受けられるようにする方法を紹介します。 今回の実装は Oracle の有償機能から OpenJDK へ寄贈され OpenJDK 11 に追加された JDK Flight Recorder(JFR)と OpenJDK 14 に追加された JFR Event Streaming を使用します。 JITコンパイルイベント OpenJDK では、JITコンパイラがコンパイルした情報を内部的にイベントとして記録しています。今回はこのイベントを使用していきます。このイベントのデータ形式は以下になります。 @Name("jdk.Compilation") @Category({"Java Virtual Machine", "Compiler"}) @Label("

    Rediness Probeでアプリケーションが十分にJITされたことを検知する - #chiroito ’s blog
  • #chiroito ’s blog

    私は仕事上、OpenJDK, Quarkus, Wildflyなど大規模なJavaのOSSをビルドして検証・バグ修正・不足機能を開発することがよくあります。 これらは大規模すぎるため、全体をビルドすると何時間もかかります。 このビルド時間は、使用しないモジュールのビルドや各モジュールでのテストも含んでいます。 時短の方法はいろいろあります。 その方法を自分のメモにしか記録していなかったため、バックアップも兼ねてここに残しておきます。 それぞれの要素は組み合わせもできます。 「他にもあるよ」という方がいらっしゃれば今後のために教えて頂けると助かります。 ここにあるものを試しても遅い場合は、速くてコアの多いCPU、高速なインターネット、IOPSの高いSSDを導入してください・・・ Lifecycleはinstallにしていますが他でも大丈夫です。 使いたいモジュールが依存するものだけを対象に

    #chiroito ’s blog
  • Quarkus で JFR Event Streaming - #chiroito ’s blog

    Java 14 から JDK Flight Recorder で取得した情報を Java プロセス内で処理する JFR Event Streaming が導入されました。今回はこれを Quarkus で使ってみたいと思います。 今回のサンプルでは JFR では標準的な情報を取得するようにします。JFR Event Streaming は、JVMの情報を記録するイベントを受け取ったらそのイベントを標準出力に処理します。Java MP のアプリケーションスコープの開始処理と終了処理で JFR Event Streaming をそれぞれ開始/終了します。 開始処理では、JFCファイルというJFRの設定ファイル名を指定して設定を読み込み、ストリームを作成します。さらに、ストリームを流れるイベントの種類ごとに処理内容を指定し、ストリームを開始します。今回読み込むJFCファイルはdefault.jfc

    Quarkus で JFR Event Streaming - #chiroito ’s blog
  • HotRod ストアを使ったWildflyのセッションレプリケーション - #chiroito ’s blog

    これまでは、リモートストアを使用して HTTP セッションを Infinispan やその商用製品である Red Hat Data Grid へオフロードしていました。ですがその方法は Wildfly 14 (JBoss EAP 7.2)から古くなったようです。新しい方法は同バージョンから導入されたelytron サブシステムと統合する HotRod プロトコルをベースとするカスタムの最適化されたキャッシュストアを使います。 24.3.10. リモートストアを使用した HTTP セッションの Red Hat Data Grid への外部化 環境 Wildfly 19.1 Infinispan 9.4.18 Java EE 8 今回構築する構成は以下の様な構成です。1 つの Wildfly と 2 つの Infinispan を構築します。 サンプルのソースコードはこちらにあります。 Git

    HotRod ストアを使ったWildflyのセッションレプリケーション - #chiroito ’s blog
  • AWS 上に構築した OpenShift に Infra ノードを追加する - #chiroito ’s blog

    コンテナイメージレジストリやルータなどインフラを構成する要素のみをホストするようなマシンをインフラノードと言います。今回はこの様なノードを AWS 上で構築した OpenShift 4.3 に追加します。 インフラノードとワーカーノードの違いは以下の要素を含んでいるかどうかです。 spec: template: metadata: labels: machine.openshift.io/cluster-api-machine-role: infra machine.openshift.io/cluster-api-machine-type: infra spec: metadata: labels: node-role.kubernetes.io/infra: "" MachineSet を作成 以下の Yaml はインフラノードとなる MachineSet のサンプルです。 chiro

    AWS 上に構築した OpenShift に Infra ノードを追加する - #chiroito ’s blog
  • Github上の最新のInfinispanを使う - #chiroito ’s blog

    Infinispanを使う時はDownload - Infinispanのようなダウンロードサイトで必要なファイルをダウンロードして使います。しかし、開発しているGithub上の最新バージョンを使って動かしたい時もあるでしょう。そんな時はビルドした後に出来上がる成果物を使います。 ビルド環境の準備の仕方はこちらをご覧ください Windows 上に Infinispan 11 のビルド環境を構築してみた - #chiroito ’s blog infinispanディレクトリにソースコードを落としてきてとして、以下の様にビルドします。 $ cd infinispan $ mvn -s maven-settings.xml package -DskipTests=true 100モジュールほどのビルドが掛かるのでしばらく待ちます。無事に終了すると infinispan\server\runti

    Github上の最新のInfinispanを使う - #chiroito ’s blog
  • OpenJDK の Author から Committer になりました - #chiroito ’s blog

    これまで通算11個のパッチを書いたので、推薦してもらい、OpenJDKコミュニティ内での信任投票の結果 OpenJDK の Committer になりました。 ※推薦してもらった時点では12個でしたが、その間に1個ダメになったので11個でした。 他のOSSだと1個パッチを書くだけでCommitterと呼ばれるようですが、OpenJDKはしっかりとした任命プロセスがあります。プロセスについては以下のリンクに詳細が記載されています。 http://openjdk.java.net/projects/#project-committer それでは任命プロセスを踏まえて私の例を振り返ってみましょう。私はまず3つのパッチを書いて、Author というロールになりました。これによって、Java Bug SystemやReview用のサーバなどのOpenJDKを開発するためのツールの一部が使えるようにな

  • Infinispan Hot RodのDistributed-cacheで自作のエンティティを使う - #chiroito ’s blog

    インメモリデータグリッドを使用するにあたり分散キャッシュを使って自作のデータ型となるエンティティを使うことは避けられないでしょう。今回はHot Rodを使ったDistributed-cacheでどうやって自作のエンティティを使うかを紹介します。 オブジェクトを読み書きするためにはオブジェクトのシリアライズ/デシリアライズが必要になります。 Infinispan を分散キャッシュとして使うにはネットワーク通信が必要ですので、シリアライズ/デシリアライズが必要となります。サーバ内ではオブジェクトはシリアライズされた状態で格納されています。そのため、サーバ側でデシリアライズする必要が無ければクライアント側だけにシリアライズ/デシリアライズの情報やクラスがあれば動きます。シリアライズするにはマーシャラが必要ですが、Infinispan では自作のエンティティに設定をするだけでマーシャラを自動生成し

    Infinispan Hot RodのDistributed-cacheで自作のエンティティを使う - #chiroito ’s blog
  • Infinispan の Hot Rod で設定ファイルとコードによる設定を組み合わせる - #chiroito ’s blog

    Infinispanを触ってて、設定ファイルで設定した内容に加え、コードによる設定を足したいなと思うことがあったので書いてみました。 以下の通りにするとHot Rodの設定ファイルであるresources/hotrod-client.propertiesを読み込みつつ、コードによる設定もできます。 ConfigurationBuilder cb = new ConfigurationBuilder(); // 設定ファイルの読み込み ClassLoader cl = Thread.currentThread().getContextClassLoader(); cb.classLoader(cl); InputStream stream = FileLookupFactory.newInstance().lookupFile("hotrod-client.properties", cl);

    Infinispan の Hot Rod で設定ファイルとコードによる設定を組み合わせる - #chiroito ’s blog
  • Infinispan のクライアントサーバモードでget/putの性能測定 - #chiroito ’s blog

    Infinispan をクライアントサーバモードで動かした時の、実行回数をスレッド数を変えて性能測定してみました。 環境 クライアントとサーバのマシンを1台ずつ用意しています。サーバマシンにはInfinispanを2プロセス起動しています。 使用したInfinispanは10.1.3.Finalです。 クライアント Lenovo X1 Xtremeで、物理4コアのi5-9400H を搭載しています。クロックは2.5GHz-4.3GHzです。 サーバ 自作のPCで、物理8コアのi9-9900Kを搭載してます。クロックは3.6GHz-5.0GHzです。 ※来は複数のサーバマシン間で複製をとるため複製においてもネットワーク通信が発生します。しかし、今回は資材の都合上同じマシン上で複製処理が行われているためネットワークを介していません。そのため、put処理では実際のベンチマークとは異なる結果にな

    Infinispan のクライアントサーバモードでget/putの性能測定 - #chiroito ’s blog
  • Infinispan をクライアントサーバモードで使ってみる - #chiroito ’s blog

    今回は、Infinispan をクライアントサーバモードでキャッシュを使用してみます。 デフォルト設定で作成してあるmycacheという名前のキャッシュを使用します。サンプルコードではまず、このキャッシュを取得します。最後にそのキャッシュにあるデータの件数やデータを取得・格納してみます。 クライアントサーバモードの環境構築についてはこちらを参照下さい。 Infinispan 10.1 の環境を構築する - #chiroito ’s blog 今回使うメソッドは以下のとおりです。使うクラスはライブラリモードと異なりますが、使うメソッドは同一です。 データの件数を取得するにはRemoteCache#size()メソッドを使用します。 データの取得にはRemoteCache#get(K)メソッドを使用し、Kには取得したいキーを指定します。 データの格納にはRemoteCache#put(K, V

    Infinispan をクライアントサーバモードで使ってみる - #chiroito ’s blog
  • Infinispan のライブラリモードでget/putの性能測定 - #chiroito ’s blog

    Infinispan をライブラリモードで動かした時の、実行回数をスレッド数を変えて性能測定してみました。 環境 Lenovo X1 Xtremeで、4コアのI5-9400H を搭載しています。 ベンチマーク 今回試した処理は get と put です。 以下が実行回数のグラフで、get は左軸、put は右軸です。数字は 100 万回を表しています。 見ると分かりますが、左軸と右軸で 10 倍違います。 スレッド数が増えるに従ってきちんとスケールしているのが分かります。 4スレッドでput も500万回実行できているのを見るとRDBMSと比べ圧倒的に更新できることが分かります。 ソースコード ベンチマークに使用した JMH のコードは以下です。 import org.infinispan.Cache; import org.infinispan.configuration.cache.C

    Infinispan のライブラリモードでget/putの性能測定 - #chiroito ’s blog
  • Infinispan をライブラリモードで使ってみる - #chiroito ’s blog

    今回は、Infinispan をライブラリモードでキャッシュを使用してみます。 デフォルト設定でキャッシュを作成し、そのキャッシュにmycacheという名前を付けます。そして、mycacheというキャッシュを取得します。最後にそのキャッシュにあるデータの件数やデータを取得・格納してみます。 ライブラリモードの環境構築についてはこちらを参照下さい。 Infinispan 10.1 の環境を構築する - #chiroito ’s blog 今回使うメソッドは以下のとおりです。 データの件数を取得するにはCache#size()メソッドを使用します。 データの取得にはCache#get(K)メソッドを使用し、Kには取得したいキーを指定します。 データの格納にはCache#put(K, V)メソッドを使用し、Kには格納したいキー、Vには格納したい値を指定します。 import org.infini

    Infinispan をライブラリモードで使ってみる - #chiroito ’s blog
  • Infinispan をテストしてみる - #chiroito ’s blog

    ここでは Infinispan を開発するにあたって必要となるテストの実行の仕方を紹介します。 環境構築についてはこちら(Windows 上に Infinispan 11 のビルド環境を構築してみた - #chiroito ’s blog)をご覧ください。 全体のテスト Infinispan のテストを全部実行するには以下の様にします。 mvn test -s maven-settings.xml 特定のモジュールだけのテスト 特定のモジュールにパッチを書いた時などにはそのモジュールのテストがきちんと通るか確認しないといけません。特定のモジュールだけのテストを実行するには、-pl <モジュール>を指定してテストを実行します。以下の例ではcoreモジュールをテストする例です。 mvn test -s maven-settings.xml -pl core 特定のモジュールの中で特定のテスト

    Infinispan をテストしてみる - #chiroito ’s blog
  • Windows 上に Infinispan 11 のビルド環境を構築してみた - #chiroito ’s blog

    ここでは Windows 上でInfinispan を開発するためビルドできるように環境を構築していきます。Windows固有の理由でテストが通らなかったりするので、テストはスキップします。 環境変数 Java 11 と Maven が必要になりますので適宜インストールしてください。 それらのインストールディレクトリをJAVA_HOMEおよびM2_HOMEとして、JavaはPATHにも通しておきましょう。 また、ビルド時にログが化けたりするので英語にします。これは_JAVA_OPTIONSで指定します。 $ set JAVA_HOME=C:\opt\jdk-11.0.2 $ set M2_HOME=C:\opt\apache-maven-3.6.2 $ set PATH=%JAVA_HOME%\bin;%PATH% $ set _JAVA_OPTIONS=-Dfile.encoding=U

    Windows 上に Infinispan 11 のビルド環境を構築してみた - #chiroito ’s blog