⇧ amazing...
Java仮想マシン(JVM:Java Virtual Machine)とは
Wikipediaさんによりますと、
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode.
Overview of a Java virtual machine (JVM) architecture based on The Java Virtual Machine Specification Java SE 7 Edition
⇧ という説明なのですが、Java仮想マシン(JVM:Java Virtual Machine)自体は、
⇧ JRE(Java Runtime Environment)に含まれますと。
ちょっと、Wikipediaの情報とは異なってそうなんだけど、
⇧ ベン図としては、
って感じになるらしい。
JRE(Java Runtime Environment)の説明を見ると、
JREは、Javaアプリケーション開発に必要なJavaコンパイラなどを含むソフトウェア開発キット (SDK) であるJava Development Kit(JDK、Java開発キット)にも同梱されている。
⇧ JDK(Java Development Kit)にJRE(Java Runtime Environment)が同梱されるとあるので、Jakarta EEの説明図が間違ってるんかな?
Java仮想マシン(JVM:Java Virtual Machine)には種類があるらしく、
This article provides non-exhaustive lists of Java SE Java virtual machines (JVMs).
- Codename One – uses the open source ParparVM
- Eclipse OpenJ9 – open-source from IBM J9, for AIX, Linux (x86, Power, and Z), macOS, Windows, MVS, OS/400, Pocket PC, z/OS.
- GraalVM – is based on HotSpot/OpenJDK, it has a polyglot feature, to transparently mix and match supported languages.
- HotSpot – the open-source Java VM implementation by Oracle.
- Jikes RVM (Jikes Research Virtual Machine) – research project. PPC and IA-32. Supports Apache Harmony and GNU Classpath libraries. Eclipse Public License.
- leJOS – Robotics suite, a firmware replacement for Lego Mindstorms programmable bricks, provides a Java programming environment for the Lego Mindstorms RCX and NXT robots.
- Maxine – meta-circular open source research VM from Oracle Labs and the University of Manchester.
⇧ 開発が続いているものが、上記になるんかな。
Javaの性能とJava仮想マシン(JVM:Java Virtual Machine)の関係
Javaの性能の説明を見ると、
⇧ Java仮想マシン(JVM:Java Virtual Machine)の初回起動に数十秒かかっていたというから、驚き。
⇧ 改善はされているらしい。
改善はされてるとは言え、推測するに、
起動時間
⇧ Javaの性能にJava仮想マシン(JVM:Java Virtual Machine)が影響してることは間違いなさそう。
Java仮想マシン(JVM:Java Virtual Machine)の起動は速くなっているらしいけど
Javaの実行速度に影響すると言われてるのが、Java仮想マシン(JVM:Java Virtual Machine)の起動時間らしいのですが、
⇧ 上記サイト様によりますと、Hotspotが一番速いということのようです。
Java仮想マシン(JVM:Java Virtual Machine)の種類によって、起動の速さが変わってくるみたいですね。
⇧ JRockitというJava仮想マシン(JVM:Java Virtual Machine)は起動に時間がかかると正直に記載してますね。
Javaが、Java仮想マシン(JVM:Java Virtual Machine)で動く以上、初回起動に時間がかかってしまうのは致し方ないということですかね。
つまり、AWS Lambdaのようなサーバーレスを実施するには、Javaは向いていないってことかと。
⇧ 上記サイト様でも、外部ライブラリを使った場合は、パフォーマンスが落ちそうなことを仰っておられたので。
サーバーレスになると、
native-imageは高速なJava及びその他言語のVMであるGraalVMの目玉機能の一つであるJavaのAOT (Ahead-Of-Time) での ネイティブイメージへの変換です。
⇧ HotspotよりもGraalVMの方が起動時間が早いという人もおられますね、正確にはGraalVMの一機能である、AOT(Ahead Of Time)で変換されるnative-imageが高速ってことみたいです。
AOT(Ahead Of Time)とJIT(Just In Time)の違いについては、
⇧ 上図が分かりやすいかと。
AWS Lambdaの言語毎の性能比較を見た限り、
⇧ Java仮想マシン(JVM:Java Virtual Machine)でサーバーレスを実現する場合は、GraalVMの機能であるnative-imageを使うのが良さそうでしょうか。
毎度モヤモヤ感が半端ない...
今回はこのへんで。