Java虚拟机:引言

对于java程序员来说,了解JVM的一些原理和执行过程还是挺有用的,通过JVM的学习,我们对java中的反射机制、多线程等就会有更清楚的认识。同时有利于调bug和优化代码。

首先我们要明白,不管什么语言最终要想让计算机明白并执行,需要得到对应的机器码。java语言的源文件是以.java结尾的,也是我们直接操作的文件。Java虚拟机可以看成一台抽象的计算机,它能够直接识别的文件是.class文件。因此,第一步我们需要将.java文件翻译成.class文件,也就是通常所说的字节码文件。但是计算机也不能识别.class文件啊,那怎么办呢?其实.class文件中的字节码相当于Java虚拟机的指令集。而Java虚拟机又可以将其对应的指令集翻译成计算机中的指令集,这样计算机就能够执行所有的指令了。

可以发现:

  • 我们操作的是.java文件;
  • Java虚拟机操作的是.class文件;
  • 计算机操作的是机器码;
  • .java文件通过JVM中的javac命令得到对应的.class文件
  • .class文件通过jre(java runtime environment)目录下的java命令可以执行。

相同的.java文件在不同操作系统上对应的.class文件是相同的,但是因为不同的操作系统都有自己对应的jre,可以将.class文件编译成不同操作系统对应的指令。因此,java有着这么一句口号:Write Once , Run Anywhere。

Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——class文件格式所关联。class文件包含了Java虚拟机指令集和符号表,以及其他一些辅助信息。

基于安全的考虑,Java虚拟机在class文件中施加了许多强制性的语法和结构化约束,凡是能用class文件正确表达出来的编程语言,都可以放在Java虚拟机里面执行。

附上Java执行过程图:
Java虚拟机:引言_第1张图片

你可能感兴趣的:(Java虚拟机)