1. 关于jdk,jre,jvm的区别联系
1.1 Java编译器,即jdk,是用来将源码编译成class字节码文件的,是java的开发环境,比如我们下载idea或者eclipse后,就会配置相应版本的jdk文件。
1.2 而虚拟机,即JVM,是指装有jre的可以运行class字节码的一种抽象化的计算机
1.3 jdk>jre >jvm,jdk工具包中含有jre运行环境,jre中包含jvm虚拟机
jdk:Java Development Kit
jre:Java Runtime Environment
jvm:Java Virtual Machine
JRE顾名思义是Java运行时环境,包含了Java虚拟机,Java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用Java语言编写Java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
2.JVM的组成
JVM是可运行Java代码的假想计算机,包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收,堆和一个存储方法域。JVM是运行在操作系统上的,它与硬件没有直接的交互。
3. 作用
Java虚拟机的作用:(核心是解释运行字节码程序消除平台相关性)。jvm将字节码解释为具体平台的具体指令,一般高级语言要在不同的平台上运行,至少需要编译成不同的目标代码。而引入java虚拟机后,java语言在不同平台上运行时不需要重新编译,Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需要生成在java虚拟机上运行的字节码,即可在多种平台上不加修改的运行。java虚拟机在执行字节码文件时,会通过Java虚拟机种的解释器,把字节码解释成具体平台的机器指令执行。
4.运行过程
Java源文件————编译器——————字节码文件,
字节码文件————JVM——————机器码,即上图。
当一个程序开始运行时,虚拟就就开始实列化,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭时,虚拟机实例消亡,多个虚拟机实例之间的数据不能共享。
字节码文件被JVM执行的过程如下:
JVM的组成可分为:类加载器,运行时数据区,执行引擎,本地接口这四部分。而运行时数据区是我们关心的重点,
关于栈,堆和方法区的简单作用和特点如下:(来自尚学堂JavaSE课件)
栈用来存储局部变量,操作数,方法出口等,堆用来存储创建好的对象和数组,方法区用来存储类信息,静态变量,字符串常量等
new一个computet和一个student对象时,图如下: