Java仮想マシン単語

1件
ジャヴァカソウマシン
3.8千文字の記事
  • 1
  • 0pt
掲示板へ

Java仮想マシン(JVM: Java Virtual Machine)とは、Javaの中間バイトコードを実行するためのプログラムである[1]

概要

Javaバイトコード[2]として定義された命セットを実行する仮想マシン

それぞれのOS向けのJava仮想マシンがバイトコードを解釈して同じ結果をもたらすように設計されているため、OSが異なっていても同じバイナリファイルをそのまま実行できる。

Java仮想マシンの実装がきちんとできていないと上記前提が崩れるので、Java仮想マシンを名乗るにはOracleテストに合格しないといけないとかいろいろあるらしい。

パフォーマンス

実行開始後に中間バイトコードをJava仮想マシンでネイティブコード(機械語)に変換して実行するので、C言語などのネイティブコードよりも遅いということがしばしば批判されるが、さまざまな最適化の成果により現在ではネイティブコードにひけを取らないレベルにまで至っている。

セキュリティ

サンドボックスモデルを採用し、限られたメモリ間内のみで動作するから安全! なはずなのだが、しばしばセキュリティホールが見つかり、ブラウザ側からセキュリティホールが改善されるまでプラグイン効にされるというペナルティを受けたことも[3]

2013年にはJava 8のリリースを延期して開発セキュリティ対策に回すなどの対応がなされ、それ以降はある程度改善したのではないかと思われる。

Java以外のJVM言語

バイトコードそのものはJavaを前提としているものの、Java言語専用というものではないため、他言語でもバイトコードに変換すればJava仮想マシンで動作させることができる。

JVM言語参照

実行環境(JRE: Java Runtime Environment)

すべての環境に共通すること(Java Standard Edition)

Java SEと略される。ハードウェアの向上も手伝い、図形・文字描画機の向上、GUI表現力の拡インストールの簡素化などがなされたため、クロスプラットフォームデスクトップアプリケーション開発において有用性が高い。

こういった機を有効活用した、ニコニコ内で有名なソフトウェアとしてはJavieMikuMikuStudioが挙げられる。

実行にはJavaインストールが必要。実行開始時にJava仮想マシンを起動してから実行する[4]ので、小さな処理をするプログラムではJava仮想マシンを起動する時間がプログラムの実行時間よりも長くなることがあり、やや敷居が高い。

エンタープライズ(Java Enterprise Edition → Jakarta EE)

に大規模なWebサービスサーバ側)、また会社間(B2B)システム、ECサイト(電子商取引サイト)、社内イントラシステム等、「会社の中の人向け」のシステム構築言語として広く使われている。Java EEと略されるが、「エンタープライズ」向けとして安定性がめられるためか同じバージョンJava SEよりも1年以上遅れてリリースされることが多い。

最近では実行環境の監視などのノウハウが溜まっているなど、スケールアウトのしやすさから所謂「クラウド」において開発用途に使われる。

また JenkinsApache Hadoopといった開発向けミドルウェアの動作環境として用いられている。

Eclipse Foundationへの移管とJakarta EEへの名称変更

Java EE 8 はJava SE 8が2014年リリースされた後3年経ってもリリースされず、一時はこのまま見捨てられるのではないかという噂が出てOracle側がこれを否定する一幕もあったが、2017年9月Java SE 9と同時にリリースされた。しかし、2018年3月Eclipse Foundationに移管され結局Oracleから捨てられた。

移管に際して、OracleJavaの名称使用継続を拒否したため、新しい名称について投票が行われ、Jakarta EEという名称に変更された。

携帯電話・組込み機器(Java Micro Edition)

モバイル向けアプリの分野、特に携帯電話では他に選択肢がないという理由で機制限つきのJavaが使われている(iアプリオープンアプリMIDPなど)

これらはまとめて「Java Micro Edition」と言われてはいるものの、「標準仕様」といったものはなく、それそれのキャリアに合わせた制作が必要なためコストが嵩むことが問題視されていた。

アプレット

こちらに移設しました。

スマホ(Android)

こちらに移設しました。

Java仮想マシンの実装

Oracleの有償のテストに合格すればJava仮想マシンを名乗ることが出来るので、実装は複数存在する。

Oracle JDK

Java仮想マシンといえば、Javaの名称に関する権利を有する(Sunを買収した)Oracle提供するものがデファクトスタンダードである。

しかし、2019年4月ライセンス条件が変更され、非商用や開発的以外は有償ライセンス契約が必要になった。Java9以降はサポート期間(修正アップデート提供期間)が半年のものと、サポート期間3年のLTS版(Long Term Support版)がある。

JavaFXJava 8までは同梱されているが、Java 9以降には含まれておらず、Gluon提供するバイナリなどに頼らねばならない。

また32ビット版もJava 8までの提供で、Java 9以降は全てのプラットフォームで64bit版のみとなっている。

OpenJDK

オープンソース実装Java7の時代にリファレンス実装定されるようになった。実質的にはOracle JDKと同じものだが、Oracleの有償契約版と異なり各バージョンサポート期間はすべて半年でありLTS版はない。サポートがあるのは常に最新バージョンJavaのみである。

バイナリOracleが評価・参考用途として提供しているが、ライセンスオープンソースライセンスなので、自己責任なら商用にも自由に使って良いのではなかろうか商用利用のためのバイナリは上記Oracle JDKを有償で使用するようにとのこと。

OpenJDKでは、JavaFXOpenJFXという独立したプロジェクトの扱いとなっており、一貫してJava仮想マシンには非同梱の立場をとっている。

こちらもJava 9以降は64bit版のみの提供となっている。

Microsoft Java Virtual Machine

1998年訴訟の判決を受けて止された。

AdoptOpenJDK

Red Hat提供するJava 8以降のOpenJDKのバイナリが手に入る。JavaFXは同梱されていない。基本的に64ビット版のみであるが、Windows用とARM用は32ビット版がある。

Amazon Corretto

OracleJava有償化の発表後に参入してきたAmazonOpenJDKによる実装

メインターゲットAWS(Amazon Web Service)だが、各種環境で動く。

JavaFXバンドルしているのだが、WebKitなど一部の機ライセンスの関係で除外されているexitJavaFXバインドしている背景AWSの機提供に使用されているからということがあるらしく、AWSで使用しない機どうでもいい実装が延び延びになってしまうようだ。

Windowのみ32ビット版もある。

Liberica JDK

BellSoftという会社のJDK。Javaの品質テストにも合格している。

BellSoftというのはあまり聞いたことがない会社だが、IntelliJ IDEAで有名なJetBrains社と提携しており、それなりに素性は確かなようだ。

JavaFXバンドルしている。JDKでなく、ランタイムのみのJRE(Java Runtime Environment)もある。32ビット版もある。

関連項目

脚注

  1. *ARM等の組み込み向けCPUにおいてJavaバイトコード直接ハードウェアで実行する技術(Jazelle)exitが搭載されていたこともあったが、2013年ごろから登場した最新のアーキテクチャARMv8ではその後継技術と共に不採用exitになっている
  2. *Java仮想マシンにとっての機械語に相当する。名前は1命が1バイトであることに由来する。
  3. *こういったペナルティAdobe Flash Playerも受けたことがあるので、Javaセキュリティが弱い、というよりリッチ・クライアントセキュリティを確保するのは難しいということかもしれない。
  4. *1997年より前の最初期:バージョン1.0ではバイトコードからネイティブコードへのコンパイルまで実行前に行なっていた。

【スポンサーリンク】

  • 1
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

Hideki Saito (単) 記事と一緒に動画もおすすめ!
提供: Hideki Saito
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

Java仮想マシン

まだ掲示板に書き込みがありません…以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • Java仮想マシンについての雑談(ダラダラとゆるい感じで)

書き込みを行うには、ニコニコのアカウントが必要です!