JFRでdirect memory statisticsを見る

JDK 15からdirect memory statisticsのJFR eventが追加されたので試したときのメモ。

準備

ソースコード

Nettyで確認したいので、Spring WebFluxを使う。Spring InitializrからWebFluxのプロジェクトを作成して、RestControllerを追加しただけ。

build.gradle

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

test {
    useJUnitPlatform()
}

DemoApplication.java

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

HelloController.java

@RestController
public class HelloController {
    @GetMapping
    public Mono<String> hello() {
        return Mono.just("Hello!");
    }
}

Demo

Flight Recorderを有効にしてアプリを実行する。

% sdk use java 17.0.1-open

% java -XX:StartFlightRecording:filename=recording1.jfr -jar build/libs/demo-0.0.1-SNAPSHOT.jar   

記録したJFRファイルをJDK Mission Controlで開くと、Direct Buffer Statisticsが確認できた。

参考