jdk中的jre和jre有什么区别?

jdk 和 jre 是什么? 有什么区别?

  • jre
    Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。
  • jdk
    Jdk 是java development kit,是java的开发工具包, 主要是给ide 用的,里面包含了各种类库和工具。当然也包括了另外一个Jre., 而且jdk/jre/bin 里面也有一个server文件夹, server文件夹下面也有一个jvm.dll 虚拟机。

为什么默认安装的情况下, 有两个jre呢

我们做了以下几个小实验:

1. 对比文件夹内容

使用 [winMerge]{https://winmerge.org/ "winMerge 下载"} 软件对两个jre 文件夹进行对比($JAVA_HOME$\jdk1.8\jre?和 $JAVA_HOME$\jre1.8), 结果如下:

可以看到,两个文件夹中的文件结构和命名绝大部分是相同的,可以推断这两个jre 文件夹是可以相互替换的。故在功能上,其实是可以相互替换的。

2. 在命令行环境下(模拟用户使用)

使用javac 命令 编译一个 Test.class 输出 hello world 的。(为什么不用考虑javac? 因为javac 不是jre 中的, 不在讨论范围内):
将$JAVA_HOME$\jdk1.8\jre?这个文件夹剪切到其它的地方,命令行输入java Test, 输出正常:

将$JAVA_HOME$\jre1.8?这个文件夹剪切到其它的地方,命令行输入java Test, 输出错误:

说明命令行这种用户使用场景下,JVM是$JAVA_HOME$\jre1.8?里面的虚拟机环境。

那有人可能要问了, 自己明明没有将$JAVA_HOME$\jre1.8?加到环境变量里面去, 为什么会使用这里面的JVM?
我们看到
原因是:在安装jre 的时候,安装程序自动在$System32$\java?(我的电脑里面是C:\Program Files (x86)\Common Files\Oracle\Java\javapath) 路径加到Path 的最上面, 在$JAVA_HOME$\jdk1.8\bin\前面, 而且在以上目录下有java.exe 文件,这个文件应该是一个wrapper, 而目的是为了让使用者免于输入太长的指命。Java.exe的工作就是找到合适的JRE来运行Java程序。 Java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] , 查询注册表之后,发现以上键值 是和$JAVA_HOME$\jre1.8\一致的。

说明在用户级别使用java虚拟机去运行jar 等程序时, 默认使用过的是单独安装的jre, 即$JAVA_HOME$\jre1.8

  1. Intellij 使用环境下 (模拟一般IDE 开发使用)
    将$JAVA_HOME$\jdk1.8\jre (即jdk集成的jre) 文件夹剪切到其它地方之后,用Intellij 打开之前一切正常的工程,发现

    报错 Cannot resolve symbol ‘Stack‘

将$JAVA_HOME$\jre1.8?移除, 保留$JAVA_HOME$jdk1.8\jre?则 IDE 一切正常。、

这说明 想Intellij 这样的开发环境下,对代码的纠错,预运行等需要使用 $JAVA_HOME$\jdk1.8\jre?这样jdk 中集成的jre

综述

根据以上的小实验结果,我们有理由相信:

  • $JAVA_HOME$\jre1.8?这样单独安装的jre 是给普通用户,和其它大多数的一般应用程序使用的java运行环境。
  • $JAVA_HOME$\jdk1.8\jre?这样集成在jdk 中的jre 是给IDE 开发环境使用的。

原文地址:https://www.cnblogs.com/huangzp1104/p/11475143.html

时间: 2024-11-07 04:07:25

jdk中的jre和jre有什么区别?的相关文章

eclipse中的两种Jre 及 Jre与Jdk的区别

分类: ——————————区分eclipse中的两种Jre———————- (Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境.如果你的机器上没有安装任何JRE(或者JDK,本文不做二者的区分),那么点击eclipse.exe就会报错说找不到JRE.此时可以安装一个JRE.或者直接把JRE目录拷贝到eclipse安装目录下. 在Eclipse的每个项目中可以为项目指定不同的JRE版本,比如A项目使用JDK1.4编译,B项目使用JDK1.5编译.这个JDK版本是和Ecl

Java中的JDK,JRE和JVM之间的区别

JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库.Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序.尽管它们看起来差不多,但是它们是不同的针对特定目的的

搭建Java环境JDK,和运行环境JRE

1:想要学习Java第一步就是搭建Java环境,就是安装JDK,又因为JDK里面包含JRE,所以在安装JDK的过程中就安装了JRE,所以以下只是给出了JDK的安装包,自行下载安装即可 链接:http://pan.baidu.com/s/1hrREdUk 密码:r6v0(安装过程中比较简单,在此省过) 2:重点说一下环境变量配置 首先打开控制面板->系统安全->系统->高级系统设置 然后 点击环境变量 然后 点击环境之后如下图,你可以选择编辑或者新建(存在的就编辑,不存在就新建) 再然后

jdk 中Runtime之单例模式 学习

这段代码是我从源码中截取的,大家很容易看到currentRuntime是一个静态变量,getRunTime对应的就是getInstacne.不是说这种方法不好吗? 1 public class Runtime { 2 45 private static Runtime currentRuntime = new Runtime(); 3 4 5 Returns the runtime object associated with the current Java application. Most

JDK中的Timer和TimerTask详解

目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedRate 一些注意点 1. Timer和TimerTask Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务. 2.

WebService之JDK中wsimport命令

1.编写WebService类,使用@WebService注解 package test; import javax.jws.WebService; @WebService public class HelloServiceImpl{ public String say(String name) { return "Hello "+name; } } WebService类 2.使用main方法发布WebService package test; import javax.xml.ws

Jdk中的设计模式

转自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助. 一.设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化 二.学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,是学习设计模式的较好的

1.5Java语言(JDK中的命令行工具)

1.3.4 配置环境变量path(1)  在dos命令行中敲入javac,出现错误提示.  错误原理:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找.如果还没有找到,就出现以上的错误提示.  所以进入到jdk安装路径\bin目录下,执行javac.看到javac参数提示信息. 1.5Java语言(JDK中的命令行工具),布布扣,bubuko.com

JDK中的URLConnection参数详解

JDK中的URLConnection参数详解 来自:http://www.blogjava.net/supercrsky/articles/247449.html 针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下总结: 1:> URL请求的类别: 分为二类,GET与POST请求.二者的区别在于:      a:) get请求可以获取静态页面