java

CompletableFutureの備忘録

CompletableFutureの使い方をよく忘れるので備忘録。 Memo staticメソッド completedFuture CompletableFuture<U> completedFuture(U value) CompletableFuture.completedFuture("OK") supplyAsync CompletableFuture<U> supplyAsync(Supplier<U> supplier) Completab</u></u></u>…

jfrコマンドの備忘録

Memo 準備 JFRファイルのサイズを大きくしたいので、大量のJFRイベントを書き込むデモアプリを用意する。 Main.java import java.time.LocalDateTime; import jdk.jfr.Category; import jdk.jfr.Description; import jdk.jfr.Event; import jdk.jfr.Label; i…

JacksonでJSONを別の階層のプロパティにマップする

具体的にはJacksonでMapにデシリアライズできるJSONを、こんなクラスにマップしたいときの備忘録。 { "key1": "value1", "key2": "value2", ... } public class Response { private Map<String, String> map; } Mapに@JsonUnwrappedは使えないので、@JsonAnySetterを使う。シ</string,>…

Javaアプリのメモリリークを調べる

JavaアプリのメモリリークをPrometheusとJDK Flight Recorderを使って調べるときのメモ。 準備 ソースコード メモリリークがあるSpring Bootのデモアプリ。 build.gradle plugins { id 'org.springframework.boot' version '2.6.7' id 'io.spring.dependency…

Javaのasync-profilerを試す

Javaのasync-profilerを試したときのメモ。 (IntelliJ IDEA Ultimateでも試せるが、今回はツールを直接実行する) 準備 async-profiler ここからasync-profilerをダウンロードする。 実際には、ダウンロードしたファイル含まれているprofiler.shを使う。 検…

JavaのSortedSet

JavaのSortedSetについての備忘録。 HashSetなどの通常のSetは要素比較にオブジェクトのequalsを使うが、TreeSetなどのSortedSetは要素比較にcompareTo(またはcompare)を使う。そのため、SortedSetにComparatorを設定している場合は、要素比較の結果がHashSe…

JacksonとLombokの組み合わせ

JacksonとLombokの組み合わせについての備忘録。 ソースコード plugins { id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = JavaVersion.VERSION_11 repositories { mavenCentral() } dependencies { annotationProcess…

JavaのOOMのコマンドラインオプション

JavaのOOMのコマンドラインオプションについての備忘録。 ソースコード OOMが発生するソースコード。 public class Main { public static void main(String[] args) { byte[] buff = new byte[Integer.MAX_VALUE]; } } Demo 今回はOpen JDK 17を使う。 % sdk…

JFRでdirect memory statisticsを見る

JDK 15からdirect memory statisticsのJFR eventが追加されたので試したときのメモ。 準備 ソースコード Nettyで確認したいので、Spring WebFluxを使う。Spring InitializrからWebFluxのプロジェクトを作成して、RestControllerを追加しただけ。 build.gradl…

JDK Flight Recorderのイベントを作る

JDK Flight Recorder (JFR) のイベントを作ったときのメモ。 準備 JDK Misson Control (JMC) ここからダウンロードしてインストールする。 ソースコード import java.util.concurrent.TimeUnit; import jdk.jfr.Category; import jdk.jfr.Description; impor…

JITWatchを試す2

前回はJITWatchのデモアプリを使ってHotSpotログファイルを作成したので、今回はソースコードを書いて試してみた。 手順は前回と同じ。 https://hirakida29.hatenablog.com/entry/2020/06/06/235407 準備 ソースコード build.gradle plugins { id 'java' id …

GradleでJNIを試す

GradleでJNIを試したときのメモ。 ソースコード % tree . . ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src ├── hello │ └── c │ ├── com_…

JITWatchを試す

OpenJDKでJITWatchを試したときのメモ。 準備 JDK AdoptOpenJDK 11 HosSpotを用意する。今回はSDKMANでインストールする。 % sdk install java 11.0.9.hs-adpt % sdk use java 11.0.9.hs-adpt hsdis (HotSpot disassembler) AdoptOpenJDKのソースコードをダ…

GradleでJava 14のプレビュー機能を試す

GradleでJava 14のプレビュー機能を試したときのメモ。 Gradleは6.3以降を使用する。 Gradle 6.3 Release Notes IntelliJ IDEAでJava 14を使う場合は、2020.1以降を使用する。 Java 14 and IntelliJ IDEA | The IntelliJ IDEA Blog ソースコード build.gradl…

GraalVMのNative Imageを試す

GraalVMのNative Imageを試したときのメモ。 ソースコード public class HelloWorld { static { System.out.println("Static initialization"); } public static void main(String[] args) { System.out.println("Hello world!"); } } Demo DockerのGraalVM…

GradleでJava 13のプレビュー機能を試す

GradleでJava 13のプレビュー機能を試したときのメモ。 Gradleは6.0以降を使用する。 Gradle 6.0 Release Notes ソースコード build.gradle --enable-previewを設定する plugins { id 'java' id 'application' } group 'com.example' version '1.0-SNAPSHOT'…

Java 14でNullPointerExceptionの詳細エラーメッセージを表示する

Java 14でNullPointerExceptionの詳細エラーメッセージを表示したいときのメモ。 ※追記 Java 15からShowCodeDetailsInExceptionMessagesはデフォルトで有効になった。 https://bugs.openjdk.java.net/browse/JDK-8233014 Demo Java 14をインストール後、Show…

docker-hiveでHive JDBCを試す

Dockerを使ってHive JDBCを試したときのメモ。 準備 ソースコード build.gradle plugins { id 'java' id 'application' } group 'com.example' version '1.0-SNAPSHOT' sourceCompatibility = JavaVersion.VERSION_11 repositories { mavenCentral() } depen…