服务器JRE与客户端JRE的区别

14

当我提取serverjre tar.gz时,我遇到了jdk文件夹。为什么serverJRE会给出类似JDK的文件夹?serverJRE中还有JRE文件夹。那么使用哪一个呢,整个serverJRE还是只使用serverJRE内部的JRE文件夹?此外,serverJRE内部的JRE内容与JDK内部的JRE相同。

我不理解它们之间的区别。


1
你在标签中提到了Java 6和Java 8。你指的是哪个版本?你所说的tar.gz文件是哪一个?你下载的文件的完整文件名是什么? - Stephen C
这里没有标明jdk1.8,所以我使用了Java 8。顺便说一句,我不关心Java的版本。我的问题是不同的。 - Kaustubh_Kharche
3
@Tunaki,我能否建议将 https://dev59.com/X2Ei5IYBdhLWcg3wq93k 添加为第二个重复问题?当前重复问题解释了两者之间的区别,但未解释 OP 所问的文件夹结构。 - user247702
2
我不同意第一个重复的答案。这个问题是关于安装“Server JRE”和“JRE”的区别,而不是关于运行java-server的问题。@Stijn提供了一个更接近的答案,但问题是从不同的角度提出的。 - jla
1
Oracle正在从他们的下载页面指向这篇博客文章,以澄清为什么需要Server JRE:https://blogs.oracle.com/java-platform-group/understanding-the-server-jre。如果我可以添加一个答案,我会总结他们深入的发帖内容。 - jla
3个回答

16

服务器JRE: 它用于在服务器上部署长时间运行的Java应用程序。它提供最快的操作速度。它已经被特别优化以最大限度地提高峰值运行速度。它具有高度侵略性的算法来优化Java应用程序的运行时性能。它还包括各种监控工具。

客户端JRE: 它用于在最终用户系统上运行Java应用程序。它包含运行Java应用程序所需的所有内容。它可以更快地启动并需要较小的内存占用。


同意...但是为什么ServerJRE作为JDK提供。当我解压缩“serverjre.tar.gz”时,它给了我一个名为“jdk”的文件夹。 - Kaustubh_Kharche
我认为serverJRE文件正在安装在JDK目录中,这就是为什么你的文件夹名为“.jdk”的原因。只需检查您的安装目录即可。 - Kevin Andrid
2
很多时候,服务器会安装包含JSP或类似内容的Web应用程序,需要JDK进行编译。 - Verhagen
Kelvin,我不是在谈论安装等问题。我只是额外提取了serverjre.tar.gz,并在提取时得到了名为jdk的文件夹,其层次结构与简单jdk完全相同。 - Kaustubh_Kharche

2

来自Oracle页面

服务器JRE包括用于JVM监视和服务器应用程序通常需要的工具,但不包括浏览器集成(Java插件)。

因此,两者之间的差异非常小。这也意味着Server JRE和JDK之间的区别主要在于JDK具有编译器。我甚至没有意识到他们已经将JRE分成了单独的产品,但多年来我想不起来有人曾向任何人建议过Client JRE。

考虑到Applets已经死了,我认为没有下载Client JRE的好理由。但是我不从事桌面Java业务,所以谁知道呢。


所以,Kayaman,你会使用整个ServerJRE还是只使用其中的JRE文件夹呢?因为两者都可以完成工作。 - Kaustubh_Kharche
1
通常我会在服务器上安装JDK,因为我希望所有可能的工具都能够使用,以防万一需要在夜间醒来修复问题。 - Kayaman
2
我始终建议安装JDK,因为这样用户就不会冒着安装垃圾软件(如Ask工具栏等)的风险。这应该足够成为理由了。此外,64位下根本没有客户端JVM,所以在内部没有技术差异... - Holger

0

我认为人们没有理解OP的出发点,而我刚好遇到了这个问题。以下是一些详细的背景信息。

截至最新季度更新,“p22187044_17095_Linux-x86-64.zip”内的服务器jre gzipped tar ball中根级目录为“jdk1.7.0_95”

在我看来,这是Oracle的疏忽。如果您需要同时使用两者并尝试将它们提取到同一个目录中,则会将两者都提取到同一个目录中。

$ unzip p22187044_17095_Linux-x86-64.zip server-jre-7u95-linux-x64.tar.gz
$ tar xzvf server-jre-7u95-linux-x64.tar.gz
# Extracted files with top-level directory: "jdk1.7.0_95"
# This polluted my previously extracted JDK (See differences below).

# Get a clean JDK 7 again:
$ rm -rf jdk1.7.0_95/

$ tar xzvf jdk-7u95-linux-x64.tar.gz

# Try again with the JRE; this time creating a container directory for the tar extraction:
$ mkdir jre1.7.0_95   &&   tar  xzvf server-jre-7u95-linux-x64.tar.gz -C jre1.7.0_95/
# Directory "jre1.7.0_95/" contains top-level directory "jdk1.7.0_95"

# Let's look at the differences:
$ diff -qr  jdk1.7.0_95     jre1.7.0_95/jdk1.7.0_95/

Only in jdk1.7.0_95/bin: ControlPanel
Only in jdk1.7.0_95/bin: javaws
Only in jdk1.7.0_95/bin: jcontrol
Only in jdk1.7.0_95/bin: jmc
Only in jdk1.7.0_95/bin: jmc.ini
Only in jdk1.7.0_95/jre/bin: ControlPanel
Only in jdk1.7.0_95/jre/bin: java_vm
Only in jdk1.7.0_95/jre/bin: javaws
Only in jdk1.7.0_95/jre/bin: jcontrol
Only in jdk1.7.0_95/jre/lib/amd64: libdeploy.so
Only in jdk1.7.0_95/jre/lib/amd64: libjavaplugin_jni.so
Only in jdk1.7.0_95/jre/lib/amd64: libnpjp2.so
Files jdk1.7.0_95/jre/lib/charsets.jar and jre1.7.0_95/jdk1.7.0_95/jre/lib/charsets.jar differ
Only in jdk1.7.0_95/jre/lib: deploy
Only in jdk1.7.0_95/jre/lib: deploy.jar
Only in jdk1.7.0_95/jre/lib: desktop
Files jdk1.7.0_95/jre/lib/ext/localedata.jar and jre1.7.0_95/jdk1.7.0_95/jre/lib/ext/localedata.jar differ
Only in jdk1.7.0_95/jre/lib/images: icons
Only in jdk1.7.0_95/jre/lib: javaws.jar
Files jdk1.7.0_95/jre/lib/jfxrt.jar and jre1.7.0_95/jdk1.7.0_95/jre/lib/jfxrt.jar differ
Files jdk1.7.0_95/jre/lib/jsse.jar and jre1.7.0_95/jdk1.7.0_95/jre/lib/jsse.jar differ
Only in jdk1.7.0_95/jre/lib: locale
Only in jdk1.7.0_95/jre/lib: plugin.jar
Files jdk1.7.0_95/jre/lib/rt.jar and jre1.7.0_95/jdk1.7.0_95/jre/lib/rt.jar differ
Only in jdk1.7.0_95/jre/lib/security: javaws.policy
Only in jdk1.7.0_95/jre: plugin
Only in jdk1.7.0_95/lib: missioncontrol
Files jdk1.7.0_95/lib/tools.jar and jre1.7.0_95/jdk1.7.0_95/lib/tools.jar differ
Only in jdk1.7.0_95/man/ja/man1: javaws.1
Only in jdk1.7.0_95/man/ja_JP.UTF-8/man1: javaws.1
Only in jdk1.7.0_95/man/man1: javaws.1

# And the size of each:
$ du -sh jdk1.7.0_95/   jre1.7.0_95/jdk1.7.0_95/

301M    jdk1.7.0_95/
235M    jre1.7.0_95/jdk1.7.0_95/

最终决定取决于您的应用程序需要使用哪种。对于供应商应用程序,我通常会参考他们的建议。如果没有建议,则使用JDK,因为它包含更多“东西”,我不希望在日后发现某些交互应用程序的所有用例都没有轻松的方法来实现所需功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接