public class Test { public static void main(String[] args){ System.out.println("test"); } }
1.编辑一个Test.java文件 --> javac Test.java 会生成一个Test.class文件-->java Test -->控制台显示程序。html
Javac:Javac是一种编译器,将一种语言转换为另外一种语言规范。编译器的做用就是将符合java语言规范的源代码转化为JVM虚拟机可以识别的字节码文件的过程。即将符合java语言规范的源码转换为JVM可识别的二进制码(原.java文件仍然保留)。java
Javap,Javac,Javah : https://blog.csdn.net/nigelyq/article/details/46379473架构
javac的实现过程:https://www.cnblogs.com/shuai-server/p/8998021.html工具
java运行过程:https://blog.csdn.net/chengzhang1989/article/details/70216634开发工具
javac的编译过程:https://blog.csdn.net/u013256816/article/details/50804493 (参考了深刻JVM虚拟机等书籍)spa
Java类到底如何加载并初始化的:https://www.cnblogs.com/jimxz/p/3974939.html操作系统
Java内存模型:http://www.importnew.com/28456.html.net
Java内存机制(浅析):http://www.cnblogs.com/KingIceMou/p/6967129.html翻译
2.什么是JVM:代理
java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,经过JVM将每一条指令翻译成不一样平台机器码,经过特定平台运行。
JVM即Java Virtual Machine,是一种计算设备的规范,是虚拟粗来的计算机,是在实际计算机上仿真模拟各计算机功能实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域,其屏蔽了具体操做系统相关信息,在执行字节码时,实际上最终仍是把字节码解释成具体平台上的机器指令执行。
1)JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也须要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程当中,JRE也是 安装的一部分。因此,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
2)JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。全部的Java 程序都要在JRE下才能运行。普通用户只须要运行已开发好的java程序,安装JRE便可。
3)JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是经过在实际的计算机上仿真模拟各类计算机功能来实现的。JVM有本身完善的硬件架构,如处理器、堆栈、寄存器等,还具备相应的指令系统。Java语言最重要的特色就是跨平台运行。使用JVM就是为了支持与操做系统无关,实现跨平台。
3.JVM执行过程:
自此引出类加载机制: http://www.importnew.com/25295.html
类加载器及JVM内存结构:http://www.cnblogs.com/KingIceMou/p/6967713.html
Java动态代理:https://www.cnblogs.com/gonjan-blog/p/6685611.html