プログラミング言語

Java

James Gosling(Sun Microsystems) / 1995年登場

“Write Once, Run Anywhere” の JVM 言語。成熟・安定し、エンタープライズの基幹システムや(従来の)Android で根強い。

3つの要点
TL;DR
  1. 一度書けばどこでも動く JVM 言語。
  2. 成熟・安定し大規模・長期保守に強い。
  3. 堅い基幹システムを長く運用するなら Java。

基本情報

仕様と特徴

Java のロゴ
製品・技術の概要Java“Write Once, Run Anywhere” の JVM 言語。成熟・安定し、エンタープライズの基幹システムや(従来の)Android で根強い。
型付け
静的強い型付け
実行方式
JVMバイトコード + JIT)
パラダイム
オブジェクト指向
登場
1995年James Gosling(Sun Microsystems)
この言語の強み
成熟安定巨大なエコシステムJVM で移植性と高い実行性能
活躍する領域
エンタープライズ基幹システムAndroid(従来) / 大規模バックエンド

選定ガイド

選定ポイント

採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。

採用に向く条件

選ぶ理由

  1. 成熟・安定・巨大なエコシステム
  2. JVM で移植性と高い実行性能
  3. 大規模・長期保守に強い

事前に確認する条件

考慮すべき点

  1. 構文が冗長(ボイラープレート)
  2. 起動が重め
  3. 言語進化が保守的

向いている用途

こんな用途に向く

エンタープライズ・基幹システムAndroid(従来)大規模バックエンド

詳しい解説

もっと詳しく

どんな言語か

Java は 1995 年に Sun Microsystems が公開した言語で、現在は Oracle が中心となって開発しています。掲げたスローガンは "Write Once, Run Anywhere"。ソースコードをバイトコードにコンパイルし、それを JVM(Java 仮想マシン)が各 OS 上で実行するため、環境を選ばず同じプログラムが動きます。

この「JVM の上で動く」という設計が Java の核心です。OS ごとの違いを JVM が吸収し、長期間にわたる後方互換性も重視されてきました。結果として、何年も前のコードが今でも動くという安定性が、企業システムで強く支持されています。

横にスクロール

javacがJavaソースを解析・型検査してclassバイトコードを生成し、JARまたはモジュールとして配布する流れと、JVMがクラスをロード・検証・準備・解決・初期化し、代表的な実装ではインタプリタ実行から実行頻度に応じたJIT機械語へ切り替え、GCがヒープを管理する責任境界図
Java の配布単位は JVM 用バイトコードで、JAR 自体に JVM は含まれません。実行時はクラスのロードとリンクを経て、代表的な JVM 実装が解釈実行・JIT・GCを受け持ちます。必要なら jlink で用途を絞ったランタイムイメージを組み立てます。

仕組み・特徴(JVM)

  • バイトコードと JIT: バイトコードを JVM が実行し、よく通る箇所を実行時に機械語へコンパイル(JIT)して高速化する。起動は重いが、長時間動くサーバーでは十分な性能が出る。
  • GC: メモリは自動管理。用途に応じて低遅延・高スループットの GC を選べる。
  • 静的型付け: 大規模開発で型が安全網になり、IDE の補完・リファクタリングが強力。
  • 巨大エコシステム: Spring をはじめとするフレームワーク、Maven/Gradle のビルド、そして JVM 上で動く Kotlin・Scala など多言語も資産を共有する。
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

得意・不得意

サーバーサイドの基幹システムのように、長く安定して動かす大規模開発が得意分野です。従来の Android 開発でも長く主役でした。一方で記述は冗長になりがちで、ボイラープレートが多く、JVM の起動に時間がかかるため短命なプロセスには不向きです(近年は GraalVM のネイティブイメージ等で改善も)。

C# / Go との違い

観点JavaC#Go
実行基盤JVMCLR(.NET)ネイティブ単一バイナリ
型付け静的静的静的(簡潔)
強み成熟・互換・巨大エコシステム言語機能と生産性シンプル・並行・配布
冗長さ多め(近年改善)少なめ少なめ

つまずきやすいところ

null と冗長さ

参照が null のまま操作すると実行時に NullPointerException が起きます。Optional や設計での回避が有効です。ボイラープレートは record・var・switch 式など近年の言語改善で軽減が進んでいます。長期サポート版(LTS)を選ぶと更新戦略を立てやすくなります。

総じて Java は、JVM による移植性・成熟したエコシステム・長期互換性を武器に、企業の大規模システムで今も中心的な言語です。

言語選定

Javaを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

エンタープライズ・基幹システム

比較で見る軸

型付け: 静的・強い型付け / 実行方式: JVM(バイトコード + JIT) / パラダイム: オブジェクト指向

導入後に効く点

JVM で移植性と高い実行性能

先に潰すリスク

構文が冗長(ボイラープレート)

数字・仕様の読み方
型付け
静的・強い型付け
実行方式
JVM(バイトコード + JIT)
パラダイム
オブジェクト指向
登場
1995年
James Gosling(Sun Microsystems)

判断チェックリスト

  • 自社の用途が「エンタープライズ・基幹システム / Android(従来)」に近いか確認する。
  • 強みである「成熟・安定・巨大なエコシステム」が本当に評価軸になるか確認する。
  • 注意点の「構文が冗長(ボイラープレート)」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

エンタープライズ・基幹システムAndroid(従来)大規模バックエンド

最初の一歩

Hello, World!

class Main {
  public static void main(String[] a) {
    System.out.println("Hello, World!");
  }
}
公式ドキュメント