JVM 技术分享(初级)

一个java程序是怎样运行起来的:

 

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执行过程:

1) 加载.class文件 2) 管理并分配内存 3) 执行垃圾收集
JRE(java运行时环境)由JVM构造的java程序的运行环,也是Java程序运行的环境,可是他同时一个操做系统的一个应用程序一个进程,所以他也有他本身的运行的生命周期,也有本身的代码和数据空间。JVM在整个jdk中处于最底层,负责于操做系统的交互,用来屏蔽操做系统环境,提供一个完整的Java运行环境,所以也就虚拟计算机。操做系统装入JVM是经过jdk中Java.exe来完成,经过下面4步来完成JVM环境:1) 建立JVM装载环境和配置 2) 装载JVM.dll 3) 初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例4) 调用JNIEnv实例装载并处理class类。
 
4.JVM体系结构:

 

  • 类装载器(ClassLoader)(用来装载.class文件)
  • 执行引擎(执行字节码,或者执行本地方法)
  • 运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈

 自此引出类加载机制: 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 

 

相关文章
相关标签/搜索