基础知识——JVM JRE JDK

?
?

引言

?
?

我们如果要用Java编写程序的话就必须安装JDK,那么JDK是什么,另外安装JDK的同时,会提示用户需要安装JRE,一般这两个就像孪生兄弟一样,装了JDK之后,如果我们进入到安装路径下,会发现除了JDK外,还有一个文件夹JRE,那么什么又是JRE,最后都说Java是跨平台语言,因为它的代码是运行在一个叫做Java虚拟机上的,那么什么又是Java虚拟机呢,本文大致说明一下这三者的区别,关于Java虚拟机如果想深入了解,建议阅读《深入理解Java虚拟机》这本书,个人认为这本书写得很棒

?
?

说明

?
?

JDK

?
?

首先JDK是Java Development Kit的缩写,也就是Java开发工具箱的意思,它包含了各种库和类,比如如下图所示,当然也包括了JRE

?
?

?
?

另外多说一句,经常用到的用来编译Java文件的javac命令就是在JDK中的,利用JDK中的javac将.java文件编译成.class文件,然后再装入到Java虚拟机中,由Java运行环境执行,而运行java程序是由其中的java命令执行的

?
?

另外再多说一句,如果类指定了包名,那么编译的时候要加上-d选项,比如在当前目录下生成与包名相对应的目录层次的编译示例如下:

?
?

javac -d . HelloWorld.java

?
?

JRE

?
?

接下来是JRE,Java Runtime Environment,Java运行环境,既然是Java运行环境,就是说这是Java程序运行必备的环境,由于Java程序是在Java虚拟机上运行的,所以必然JRE是包含JVM的,我们看看JRE文件夹下有些什么,提供了很多bin和lib

?
?

?
?

bin中是很多应用程序,包括动态链接库以及window程序

?
?

?
?

除此之外JRE还包括了Java API

?
?

JVM

?
?

接下来我们来简单说说JVM,JVM包括:JVM解释器,指令系统,寄存器,栈,存储区,碎片回收区

?
?

JVM解释器:相当于CPU,处理字节码

?
?

指令系统:与计算机相似,一条指令由操作码和操作数两部分组成,操作码是8位二进制数,主要是说明一条指令的功能,操作数视情况而定

?
?

寄存器:作用是可以快速的与JVM的解释器进行数据交换,4个32位寄存器:PC程序计数器,optop寄存器操作数栈顶指针,frame寄存器指向当前执行环境指针和vars寄存器指向当前执行环境中第一局部变量的指针

?
?

栈:指令执行时数据和信息存储的场所和控制中心

?
?

存储区:存储编译后的字节码

?
?

关于Java虚拟机如果想深入了解,强烈建议阅读《深入理解Java虚拟机》这本书

?
?

CLASSPATH

?
?

这个变量很重要,但是很多时候我们都忽视它,尤其是在我们用eclipse等集成开发环境的时候,CLASSPATH环境变量是在编译Java源码和运行程序的时候用到的,它是Java程序所依赖的接口、类等的一个搜索路径,比如以下一个实例指定了是三个搜索路径,一个是当前路径,一个是一个特定的文件,一个是一个文件夹下的所有文件

?
?

.;c:\jar\logj4.jar;d:\work\java

?
?

另外多说一句,Java在编译和运行程序时不仅在CLASSPATH中去搜索,还会去找jre/lib/rt.jar文件,而且是比CLASSPATH更先找,这个在双亲委派模型中说道,是因为要去加载其中的最基础的一些类,具体可以去看深入理解Java虚拟机这本书的相关部分

?
?

另外再编译和运行时指定CLASSPATH的命令如下

?
?

?
?

时间: 2024-10-31 17:29:23

基础知识——JVM JRE JDK的相关文章

JVM JRE JDK三者的区别和联系

一. 详细介绍1.JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行.JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域. JVM 通过抽象操作系统和 CPU

基础知识总结之 jdk部分

第一次安装jdk 按照操作走完  会出现 C:\Program Files\Java\jdk1.8.0_91 和 C:\Program Files\Java\jre1.8.0_91 两个目录 (平级目录)  这里jre和jdk中的jre目录一模一样,为什么会出现这种呢? 简单说下:jdk是面向java开发者的 是java开发的sdk,jdk目录下的bin目录最主要的是javac 编译来使用,lib中有dt.jar,tools.jar主要是编译过程中运行环境使用,jdk下的jre目录,主要作用是运

JVM JRE JDK

JVM:Java Virtual Machine, Java虚拟机,是可以运行Java字节码文件的虚拟计算机系统.可以把它看作是一个微型的操作系统,在它上面可以执行Java的字节码程序,它附着在具体的操作系统之上,其本身有一套虚拟机指令,但是它通常是在软件而不是硬件上实现.JVM实现了硬件平台.操作系统与字节码程序的联系,只有通过JVM处理后字节码才可以转换为特定机器上的机器码,然后才能运行.JVM的运行过程:加载.class文件:检验字节码:执行代码. JRE: Java Runtime En

JRE与JVM、JDK的区别

一.      详细介绍 1.JVM -- java virtual machine        JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行. JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域. JV

Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java

By Chaitanya Singh | Filed Under: Learn Java Java is a high level programming language. A program written in high level language cannot be run on any machine directly. First, it needs to be translated into that particular machine language. The javac

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载

java--学习java从这里开始:Java语言基础(1)《基础知识篇》--黑马程序员

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java语言基础(1) 从这篇日记开始说一些关于java的语言基础知识, 1  Java语言概述 java的创始人——詹姆斯·高斯林(James Gosling) 1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第7一代工作站NeWS系统,但不受重视.后来转至Sun公司,1990年,与Patrick,Na

学习Spring必学的Java基础知识(1)----反射

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性