1、程序的运行流程
HelloWorld.java——>javac——>HelloWorld.class——>jvm 从软件层次屏蔽不同操作系统在底层硬件与指令上的区别——>windows机器码和linux机器码。一次编译,到处运行。
实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。
2、java虚拟机主要组成部分
堆:用来存放由new创建的对象和数组,先进后出。
栈:栈内存都速度要快于堆内存,因为栈内存储存的局部变量,跟新速度快。主要有局部变量,操作数栈,动态链接,方法出口几部分组成。
局部变量:int a=1;int b=2;
程序计数器:是每个线程独有的,程序计数器是一个记录着当前线程所执行的字节码的行号指示器。
操作数栈:每一个独立的栈桢中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也可以称之为表达式栈。在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈/出栈
- 某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用他们后再把结果压入栈。
- 比如:执行复制、交换、求和等操作。
动态链接:指向运行时常量池的方法引用。在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用保存在class文件的常量池里。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
方法出口
方法区:它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
本地方法:该方法的实现由非java语言实现,比如C,由native修饰