目录
前言
阅读本文之前请先仔细思考以下问题:
-
为什么要学习JVM?学习JVM是为了什么?
-
为什么Java语言代码能一次编写,到处运行(Write Once,Run Anywhere)?
-
JVM是多语言的平台,JRuby、Groovy、Scala等为什么能运行在JVM之上?
-
Java到底是解释型的语言还是编译型的语言?
补充1:JDK:JRE:JVM三者之间的区别?
JDK=JRE+开发工集(例如:Javac编译工具等)
JRE=JVM+基础标准类库
补充2:理解“JVM是跨语言的平台”这句话
一、了解Java程序运行的过程
Java程序的运行过程可以概括为先通过编译工具javac将.java文件编译为.class字节码文件,接着通过java.exe把字节码文件加载到JVM,如下图所示:
从定性角度分析,.java文件转换到.class文件只不过是转换了一种形式而已,转换得到的.class文件称为字节码文件,它有固定的结构(参考字节码文件格式和虚拟机规范https://docs.oracle.com/javase/specs/jvms/se8/html/index.html)。当然,除了阅读这个文档之外,还可以通过javap命令来反编译字节码文件去分析其中的内容。
二、字节码文件的“装到”JVM的机制——类加载机制
1.步骤
loading->linking->initializing
2.步骤详解
1.加载:通过类的全限定名来获得文件名