私有JRE和公共JRE有什么区别?

25

私有JRE和公共JRE之间有什么区别?这个主题有没有官方文献?

我在SO上没有找到关于这个主题的问题。也没有找到什么满意的答案。


1
希望这可以帮到你:http://blog.sarathonline.com/2008/07/public-and-private-jre.html - Alexis C.
4个回答

13
一个JRE就是一个包含JVM可执行文件、设置文件、所需的lib文件和扩展的文件夹。您可以在系统上安装多个JRE,Sun通常将版本安装在C:\Program Files\Java下,例如jre1.6.0_06。
公共JRE可供所有Java程序、浏览器和此JRE文件夹中的库使用,并且可用于像java com.sarathonline.cli.HelloWorld这样在命令行中启动的应用程序。此JRE也已在路径和浏览器插件中注册。
私有JRE是安装在系统中但默认情况下不被引用的东西。这可能是从另一个已安装目录复制的JRE / JDK文件夹。如果您看到我的早期帖子:以jre 1.6启动eclipse,其中您的环境为1.4,则仅由Eclipse使用JRE1.6,这是私有JRE。而JAVA_HOME指向1.4。这是公共JRE。
来源:

http://blog.sarathonline.com/2008/07/public-and-private-jre.html

关于这个主题的更多讨论:

http://www.velocityreviews.com/forums/t649860-private-vs-public-jre-in-different-oss.html


1
这是您要求的官方参考文档:http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jdk-installation-windows.html#private以下是最重要的部分副本(截至2016年6月): - corny
私有JRE完全包含在一个jre目录中(通常位于C:\Program Files\jdk1.7.0\jre),其位置仅JDK知道。公共JRE可以被其他Java应用程序使用,包含在JDK之外(通常位于C:\Program Files\Java\jre1.7.0),在Windows注册表(位于HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft)中注册,可以使用添加/删除程序进行删除,可能会在浏览器中注册,并且可能已将java.exe文件复制到Windows系统目录中(这将使其成为默认的系统Java平台)。 - corny
这个引用有误导性 - 私有JRE不必在JDK内部。任何未配置为操作系统默认值的JRE都是私有JRE。 - eis

5

官方答案,来自Oracle

私有JRE与公共JRE

安装JDK也会安装一个私有JRE和可选的公共副本。私有JRE用于运行JDK附带的工具。它没有注册表设置,并完全包含在jre目录中(通常位于C:\Program Files\jdk1.8.0\jre),其位置仅为JDK所知。另一方面,公共JRE可以被其他Java应用程序使用,包含在JDK之外(通常位于C:\Program Files\Java\jre1.8.0),在Windows注册表中注册(在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft),可以使用添加/删除程序进行删除,可能已在浏览器中注册,并且可能已将java.exe文件复制到Windows系统目录中(这将使其成为默认的系统Java平台)。


3
很遗憾,JDK安装程序不允许你选择不安装私有JRE,只能不安装公共JRE。顺便说一句,在SSD盘时代,它占用了110MB的硬盘空间(v9),这可不是小意思。这是Oracle非常糟糕的设计!为什么要安装两个110MB的巨型文件,如果它们是相同的呢?令人失望! - Palo
@Palo 也许你可以删除私有的JRE,而是创建一个符号链接指向公共的JRE。当然,这假设公共的JRE可以替换JDK中包含的私有JRE。 - Utku
安装公共JRE,相信我,除了符号链接和regedit之外,还有很多事情要做,使用私有JRE会浪费我很多时间,因为它并没有“真正”安装。非常糟糕的设计选择。 - 98percentmonkey

2
答案很简单:公共JRE是用户运行任何Java程序所使用的版本。私有JRE是另一个安装版本,只有在明确执行Java二进制文件时才能使用(例如,在Windows上:“C:\Programs\Java\MyJava\bin\java.exe”)。

1
这个答案没有指出除了使用模糊的术语“任何Java”与“明确地...那个Java”之外的区别。 - eel ghEEz

1
私有JRE -> 私有JRE用于Java应用程序的编译,当公共和私有JRE都可用且其安装位置由用户定义时。
公共JRE -> 公共JRE用于执行Java应用程序,当公共和私有JRE都可用时...如果私有JRE不可用,则编译和执行过程将由公共JRE完成。

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