言語横断ベンチマーク設計
type: Concept
definition: C#・C++・Java・Goのように異なる言語・ランタイムの実装間で、測定条件を揃えて実行速度を公平に比較するための設計手法。
alternative label: Cross-language benchmarking
alternative label: 言語間の性能比較
uses: テールレイテンシのパーセンタイル(p95/p99)
uses: checksumによる正しさ確認
uses: JIT(Just-In-Time)コンパイル
uses: AOT(事前)コンパイル

C#
type: Concept
definition: マイクロソフトが提供する、.NET上で動作するオブジェクト指向のプログラミング言語。
alternative label: C#言語
uses: Tiered Compilation
uses: ガベージコレクション(GC)

JIT(Just-In-Time)コンパイル
type: Concept
definition: 実行時に中間コード(.NETのILやJavaのバイトコードなど)からネイティブコードを生成するコンパイル方式。
alternative label: 実行時JIT

Java
type: Concept
definition: JVM(Java仮想マシン)上でバイトコードを実行時にJITコンパイルして動作するオブジェクト指向プログラミング言語。
alternative label: Javaプログラミング言語
uses: ガベージコレクション(GC)

C++
type: Concept
definition: コンパイル時にネイティブコードへ事前コンパイル(AOT)される、ISO標準のシステムプログラミング言語。
alternative label: C Plus Plus
uses: AOT(事前)コンパイル

AOT(事前)コンパイル
type: Concept
definition: プログラムを実行する前に、ソースコードをあらかじめネイティブの機械語へ変換しておく方式。
alternative label: Ahead-of-Time Compilation
alternative label: 事前コンパイル

Go
type: Concept
definition: Googleが開発した、実行前にネイティブの機械語へ事前コンパイルされるプログラミング言語。
alternative label: Golang
alternative label: Go言語
uses: AOT(事前)コンパイル
uses: GOMAXPROCS
uses: ガベージコレクション(GC)

Tiered Compilation
type: Concept
definition: .NETのJITが、まず素早く生成した層のコードで実行し、よく呼ばれるメソッドだけ後から最適化し直す2段階のコンパイル方式。
alternative label: 階層化コンパイル

GOMAXPROCS
type: Concept
definition: Goのランタイムが、Goのコードを同時に実行できるOSスレッド数の上限を設定する仕組み。

cgo
type: Concept
definition: GoのコードからCのコードを呼び出せるようにするGoの仕組み。有効にすると呼び出しコストやビルド条件が変わる。

BenchmarkDotNet
type: Concept
definition: C#(.NET)向けの、ウォームアップや統計処理を自動で行うマイクロベンチマークライブラリ。
uses: ウォームアップ後の安定状態計測(warm)

JMH(Java Microbenchmark Harness)
type: Concept
definition: OpenJDKが提供する、Java向けのマイクロベンチマークを作成・実行するためのハーネス。
alternative label: Java Microbenchmark Harness
uses: ウォームアップ後の安定状態計測(warm)

go test -bench と benchstat
type: Concept
definition: Go標準のtestingパッケージが提供するベンチマーク実行機能(go test -bench)と、その結果を統計的に比較するbenchstatツールの組み合わせ。
alternative label: Go testing package benchmark
alternative label: benchstat

Google Benchmark
type: Concept
definition: Googleが提供する、C++向けのマイクロベンチマークライブラリ。
alternative label: Google Benchmark library

ウォームアップ後の安定状態計測(warm)
type: Concept
definition: プロセス起動直後を含むcoldな状態と区別して、数回の実行を経て安定した後の状態だけを対象に行う性能測定。
alternative label: Warm-up measurement
alternative label: warm state

デッドコード除去(最適化による処理の消滅)
type: Concept
definition: コンパイラが、結果が使用されないと判断した計算やコードを最適化によって丸ごと取り除いてしまうこと。
alternative label: Dead Code Elimination
alternative label: 最適化による処理消去

checksumによる正しさ確認
type: Concept
definition: 比較対象の全実装が同じ入力から同じ結果(checksum)を返すことを確認する、速度比較に先立つ検証手順。
alternative label: 正しさ確認
alternative label: 結果検証
prevents: デッドコード除去(最適化による処理の消滅)

テールレイテンシのパーセンタイル(p95/p99)
type: Concept
definition: 全実行を速い順に並べたときの95%地点・99%地点の値で、平均には表れにくい遅い応答の分布を示す指標。
alternative label: p95
alternative label: p99
alternative label: Tail Latency

ガベージコレクション(GC)
type: Concept
definition: プログラムが使わなくなったメモリ上のオブジェクトを自動的に検出し、解放するランタイムの仕組み。
alternative label: Garbage Collection
alternative label: GC

subject: C#
predicate: uses
object: JIT(Just-In-Time)コンパイル
description: JIT前提の.NETランタイムで実行する場合、C#(.NET)はCILを実行時にJITコンパイラでネイティブコードへ変換しながら実行する。Native AOTで発行した場合は事前コンパイルされ実行時のJITは使われない
evidence: managed-execution-process
verified at: 2026-08-01
certainty: context-dependent

subject: Java
predicate: uses
object: JIT(Just-In-Time)コンパイル
description: HotSpot VMのようなJIT前提の実行環境では、Javaはバイトコードを実行時にJITコンパイルする。native-imageなどで事前コンパイルした場合は当てはまらない
evidence: https://docs.oracle.com/en/java/javase/21/
verified at: 2026-08-01
certainty: context-dependent

subject: C++
predicate: uses
object: AOT(事前)コンパイル
description: C++はコンパイラが実行前にソースコードをネイティブの実行ファイルまで変換する事前コンパイル方式を取る。
evidence: compiler-options
verified at: 2026-08-01
certainty: established

subject: Go
predicate: uses
object: AOT(事前)コンパイル
description: Goのプログラムは実行前にネイティブの機械語へコンパイルされ、JITを持たない。
evidence: faq
verified at: 2026-08-01
certainty: established

subject: C#
predicate: uses
object: Tiered Compilation
description: .NETのJITは、まず素早くコンパイルする層で実行し、よく呼ばれるメソッドだけ後から最適化し直すTiered Compilationを既定で備える。
evidence: compilation
verified at: 2026-08-01
certainty: established

subject: Go
predicate: uses
object: GOMAXPROCS
description: GoランタイムはGOMAXPROCSでGoコードを同時実行するOSスレッド数の上限を制御する。
evidence: runtime
verified at: 2026-08-01
certainty: established

subject: Go
predicate: uses
object: cgo
description: CのコードをGoから呼び出す場合に限り、GoはcgoによってCのコードを呼び出せるが、有効にすると呼び出しコストやビルド条件が変わる。
evidence: cgo
verified at: 2026-08-01
certainty: context-dependent

subject: C#
predicate: uses
object: BenchmarkDotNet
description: C#で言語内マイクロベンチマークを書く場合には、BenchmarkDotNetを使う。
evidence: getting-started.html
verified at: 2026-08-01
certainty: context-dependent

subject: Java
predicate: uses
object: JMH(Java Microbenchmark Harness)
description: Javaで言語内マイクロベンチマークを書く場合には、OpenJDKのJMHを使う。
evidence: jmh
verified at: 2026-08-01
certainty: context-dependent

subject: Go
predicate: uses
object: go test -bench と benchstat
description: Goで言語内ベンチマークを書く場合には、testingパッケージのgo test -benchとbenchstatを使う。
evidence: testing
verified at: 2026-08-01
certainty: context-dependent

subject: C++
predicate: uses
object: Google Benchmark
description: C++で言語内マイクロベンチマークを書く場合には、Google Benchmarkを使う。
evidence: user guide.html
verified at: 2026-08-01
certainty: context-dependent

subject: BenchmarkDotNet
predicate: uses
object: ウォームアップ後の安定状態計測(warm)
description: BenchmarkDotNetは複数回のイテレーションとウォームアップを経て安定した測定値を得る仕組みを標準で備える。
evidence: getting-started.html
verified at: 2026-08-01
certainty: established

subject: JMH(Java Microbenchmark Harness)
predicate: uses
object: ウォームアップ後の安定状態計測(warm)
description: JMHは@Warmupアノテーションでウォームアップの反復回数と時間を明示的に指定する仕組みを持つ。
evidence: jmh
verified at: 2026-08-01
certainty: established

subject: Google Benchmark
predicate: prevents
object: デッドコード除去(最適化による処理の消滅)
description: Google BenchmarkのDoNotOptimize/ClobberMemoryのような最適化抑止の仕組みで結果を消費させた場合に限り、コンパイラが未使用と判断した計算を消し去ることを防げる。単に使わないローカル変数へ結果を入れるだけでは消される
evidence: user guide.html
verified at: 2026-08-01
certainty: context-dependent

subject: C++
predicate: mayCause
object: デッドコード除去(最適化による処理の消滅)
description: C++の最適化コンパイラは、計算結果が使用されないと判断すると、その処理自体を丸ごと消してしまうことがある。
evidence: compiler-options
verified at: 2026-08-01
certainty: context-dependent

subject: checksumによる正しさ確認
predicate: prevents
object: デッドコード除去(最適化による処理の消滅)
description: 計算結果をchecksumとして出力・使用させることで、コンパイラによる最適化除去を防ぐ。
evidence: user guide.html
verified at: 2026-08-01
certainty: established

subject: 言語横断ベンチマーク設計
predicate: uses
object: テールレイテンシのパーセンタイル(p95/p99)
description: 分布の評価には平均だけでなくp95/p99のようなテールレイテンシのパーセンタイルを使う。
evidence: monitoring-distributed-systems
verified at: 2026-08-01
certainty: established

subject: C#
predicate: uses
object: ガベージコレクション(GC)
description: .NETはガベージコレクターがオブジェクトの割り当てと解放を管理する。
evidence: garbage-collection
verified at: 2026-08-01
certainty: established

subject: Java
predicate: uses
object: ガベージコレクション(GC)
description: JavaはHotSpot VMのガベージコレクション方式でメモリのライフサイクルを管理する。
evidence: gctuning
verified at: 2026-08-01
certainty: established

subject: Go
predicate: uses
object: ガベージコレクション(GC)
description: Goランタイムはトレーシング方式のガベージコレクターでヒープを管理する。
evidence: gc-guide
verified at: 2026-08-01
certainty: established

subject: 言語横断ベンチマーク設計
predicate: uses
object: ウォームアップ後の安定状態計測(warm)
description: JITの影響を受けるC#やJavaを含む比較では、ウォームアップ後の安定状態を初回実行と区別して計測することが前提になる。
evidence: getting-started.html
verified at: 2026-08-01
certainty: context-dependent

subject: 言語横断ベンチマーク設計
predicate: uses
object: checksumによる正しさ確認
description: 比較対象の全実装が同じ入力から同じ結果(checksum)を返すことを確認してから速度を比較する。
evidence: user guide.html
verified at: 2026-08-01
certainty: established

subject: 言語横断ベンチマーク設計
predicate: uses
object: JIT(Just-In-Time)コンパイル
description: C#とJavaはJITの影響を受けるため、比較設計はJITの扱いを踏まえる必要がある。
evidence: managed-execution-process
verified at: 2026-08-01
certainty: established

subject: 言語横断ベンチマーク設計
predicate: uses
object: AOT(事前)コンパイル
description: C++とGoは通常事前コンパイル済みであり、これがJIT言語との比較設計上の違いを生む。
evidence: faq
verified at: 2026-08-01
certainty: established