JDK、JRE、JVM之间的关系

从 0 到 1:用 Trae 插件 Builder 模式开发端午包粽子小游戏 Trae插件的Builder模式为开发者提供了一种高效的项目搭建方式,通过自然语言描述需求,能够快速生成项目框架和核心代码,减少重复性工作。本文以开发端午包粽子小游戏为例,展示了Trae插件的安装、使用及功能特点。通过自然语言描述,插件能够理解并生成项目结构、代码文件,并提供开发路线图建议。在实际开发中,虽然自然语言描述的精准度对生成结果有影响,但Trae插件在代码生成效率和项目搭建速度上表现出色,尤其适合中小项目和特定类型应用的快速开发。未来,插件在复杂大型项目的高度定制化开发方面仍有提升空间。 阅读详情
JDK、JRE、JVM之间的关系
如果安装了JDK,会发同你的电脑有两套JRE,
一套位于 <JDK安装目录>/jre
另外一套位于 C:/Program Files/Java/j2re1.4.1_01 目录下
后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:/Program Files/Java 目录下的JRE。
如果你只安装JRE,而不是JDK,那么只会在 C:/Program Files/Java 目录下安装唯一的一套JRE。

JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Java应用程序。

1、为什么Sun要让JDK安装两套相同的JRE?
这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 <JDK安装目录>/lib/tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main
这个意思是说,你输入javac.exe与输入
java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main

是一样的,会得到相同的结果。
从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现<JDK安装目录>/lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:/Program Files/Java目录下的那套JRE就是用来运行一般Java程序用的。

2、如果一台电脑安装两套以上的JRE,谁来决定呢?
这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。
java.exe依照底下的顺序来查找JRE:
自己的目录下有没有JRE;
父目录有没有JRE;
查询注册表:
[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]

所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。

3、介绍JVM
JRE目录下的Bin目录有两个目录:server与client。这就是真正的jvm.dll所在。
jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。
因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll。


2、如果一台电脑安装两套以上的JRE,谁来决定呢?
这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。
java.exe依照底下的顺序来查找JRE:
自己的目录下有没有JRE;
父目录有没有JRE;
查询注册表:
[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]
所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。



1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.
Add one more:

Even j2sdk (JDK is the old name) is free, but it is illegal to distribute j2sdk with your product. Therefore if your product required j2sdk to run. Then you must require your client to download it from Sun and install it before instalation of your product. What a headache! Sad

On the opposite, you can distribute JRE with your application freely.

javac is Sun's version of java compiler, not a wrapper. Like any other executables, it uses other libraries such as some dll on windows, some shared libraies on Unix. It also uses some jar files came with it. That is just how it is, and how it works.

It is quite normal, Isn't it?

javachina wrote:
1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.



java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main

javachina wrote:
1) Not exactly, java executable is part of one JRE on your path. Unless you put java (.exe?? There is no java.exe on unix) somewhere else.

2) Another problem is if you put two imcompatable JREs on your machine, it might cause your ObjectInputStream corrupted.

3) For developer's machine, j2sdk without another JRE is the best choice.



java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main

Java.lang.NoClassDefFoundError 的解决方法 Java.lang.NoClassDefFoundError 的解决方法Java开发过程中,经常会遇到 java.lang.NoClassDefFoundError 错误。这个错误通常表示在运行时找不到所需的类。本文将探讨这个问题的原因,并提供一些解决方案。 阅读详情

相关推荐

NoClassDefNotFound解决办法

NoClassDefNotFound解决办法原因解决办法maven官方库选择包导入包非spring项目spring项目 原因 虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。NoClassDefFoundError错误,字面理解就是这个类的定义找不到,简单理解就是相应的包没有导入进去或者导入错误。 解决办法 我们常常遇到一些NoClassDefFoundError错误,只需要百度就能找到自己对应的错误导包,但也有偶尔的情况出现自己百度不到的包。这时候就需要maven官方仓库了。 mave

C_lea的博客 7687

java.lang.NoClassDefFoundError原因 以及如何解决

ClassNotfoundException java开发中经常遇到java.lang.ClassNotfoundException异常,ClassNotfoundException异常一般就是编译时找不到类,Console台就会输出异常信息。一般情况下,我们都会rebuild或者clean一下工程,让项目重新编译一遍。 两个异常的区别 不过一遇到NoClassDefFoundError,我们有...

嘉树麻麻 8万+

java.lang.NoClassDefFoundError异常缘由及解决办法

记录java.lang.NoClassDefFoundError异常缘由及解决办法

weixin_43947094的博客 12万+

JDKJREJVM 之间关系

JDKJREJVM 之间关系

m0_56673710的博客 1万+

简述javaJDKJREJVM之间关系

初学java平台,很容易搞不清楚java中的一些概念。以下简述一下本人对JDKJREJVM之间关系: 概念 JDKJava Development Kit)简单理解就是Java开发工具包,是java的核心所在;JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是面向开发者的,JRE是面向使用JAVA程序的用户,JVMjava实现跨平台和系统的媒介所在。 一、JDK(Java Dev

m0_67401417的博客 1万+

JDKJREJVM之间关系

1 图形理解 2 JDKJava Development Kit):JAVA开发工具包 JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。 JDK包含JRE,而JRE包 含JVM。 2....

718

JDKJREJVM三者之间关系

基本介绍: JDKJava Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JREJava工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVMJava Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。 1、JDK JDKjava开发工具包,在其安

wu_you_gu_liang的博客 3406

JavaJDKJREJVM之间关系

是三个核心概念,其关系可概括为。

2301_80215285的博客 1172

Javajdk jre jvm 三者之间关系

Java中的 JDK JRE JVMJDK JRE JVM三者之间联系 JDK JRE JVM JDK: Java Development Kit (JDK). Java的开发工具包。其包含了Java开发的工具(Javac、Java、jdb等)和基本类库(Java API)。 JREJava Runtime Environment (JRE). Java的运行环境。包含了Java运行环境。 J...

Dianna_YY的博客 774

JDK,JRE,JVM三者之间关系,以及JDK,JRE包含的主要结构有哪些?

JDK,JRE,JVM是一个包含关系,具体关系如下图。 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。‘’ JVM = bin目录 lib表示JVM工作所需要的类库 也就是:JRE = lib + bin JDK ...

Buggggggg 1万+

JDK,JRE,JVM三者之间关系

JDK,JRE,JVM三者之间关系,以及JDK,JRE,JVM包含的主要结构有哪些? JDK=:JAVADevelopment Kit(JAVA开发工具包) JREJAVARuntime Environment(JAVA运行环境) JVMJAVA Virtual Machine(JAVA虚拟机) 三者的包含关系如下图: JDK包含JREJAVA的开发工具 JRE包含JVMJAVA的核心类库 下列概念图说明了javase的组件关系: 主要结构: JDK...

寻初小屋 5964

JDK,JRE,JVM之间关系

JDK,JRE,JVM之间关系JDKJava Development Kit)包括了Java运行环境JREJava工具和Java基础类库 bin:最主要的是编译器(javac.exe); db:jdk从1.6之后内置了Derby数据库,它是是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。用Java实现的,所以可以在任何平台上运行;另外一个特点是体积小,免安装,只需要几个小jar包就可以运行了。 include:javaJVM交互用的头文件; lib:常用类库 jre:jav

weixin_47962244的博客 175

JDKJRE以及JVM三者之间关系

JVMJRE以及JDK三者之间关系 **JDK(Java Development Kit) Java开发工具包:**JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。 我们常常用JDK来代指Java API,Java API是Jav...

weixin_41924879的博客 632

jdkjrejvm之间关系

** JVMJREJDK之间关系 ** 这些是我结合了几个博主的内容 诠释一、 JDKjava development kit) JDKJava开发工具包,是整个Java的核心,包括了Java运行环境JREJava工具和Java基础类库。 JREjava runtime environment) JREJava的运行环境,包括JVM标准实现及Java核心类库。 JVMjava v...

CollapseToDespair的博客 371
上一篇: [J2EE学习笔记01]配置标准的J2EE开发环境
下一篇: 有一架天平12个小球,其中有11个重量相同,1个与另外11个不同(不清楚这个球是轻还是重),要求最多称3次,就可以将其中重量特殊的小球找出来。
mb459
博客等级 码龄23年 9粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值