OpenJDK 还是 SunJDK?

由于刚开始接触Linux,所以在搜索如何安装jdk的问题上,有了不同的说法,其中有一种安装是直接安装OpenJDK,还有一种方法下载官方网站的SunJDK,那么两个区别是什么呢?下面是知乎的网友给出的见解。

作者:Aloys寒风
链接:https://www.zhihu.com/question/19646618/answer/40621705
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK,那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢?

历史上的原因是,OpenJDK是JDK的开放原始码版本,以GPL(General Public License)协议的形式放出(题主提到的open就是指的开源)。在JDK7的时候,OpenJDK已经作为JDK7的主干开发,SUN JDK7是在OpenJDK7的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用JRL(JavaResearch License,Java研究授权协议)发布。至于OpenJDK6则更是有其复杂的一面,首先是OpenJDK6是JDK7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准。关于JDK和OpenJDK的区别,可以归纳为以下几点:

授权协议的不同:OpenJDK采用GPL V2协议放出,而SUN JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK不包含Deployment(部署)功能:部署的功能包括:browser Plugin、Java Web Start、以及Java控制面板,这些功能在OpenJDK中是找不到的。
OpenJDK源代码不完整:这个很容易想到,在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码 将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6),促使OpenJDK更加完整。

部分源代码用开源代码替换:由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。OpenIDK只包含最精简的JDK:OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

不能使用Java商标:这个很容易理解,在安装OpenJDK的机器上,输入“java-version”显示的是OpenJDK,但是如果是使用Icedtea补丁的OpenJDK,显示的是java。

总之,在Java体系中,还是有很多不自由的成分,源代码的开发不够彻底,希望Oracle能够让JCP更自由开放一些,这也是所有Java社区所希望的。

参考文章:
java - What is the difference between JVM,JDK,JRE & OpenJDK?http://blog.softrayn.com/2012...

如何选择

Oracle JDK 和openJDK 有99.9%的代码是一样的,所以对于普通开发者没有影响,为了日后少操些心,我还决定用官方的版本吧。

安装SUN / Oracle JDK

  1. 在官网下好版本。

2.创建一个目录作为JDK的安装目录.

`sudo mkdir /java`
  1. 移动文件到/java目录下
    sudo mv /home/dreamer/下载/jdk-8u161-linux-x64.tar.gz /java
  2. 解压文件
    解压文件之前,先cd到java文件夹下面。
    sudo tar -zxvf /java/jdk-8u161-linux-x64.tar.gz
  3. 配置环境
    sudo vim /etc/environment
    配置请替换自己的文件夹。
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin"
export CLAsspATH=“.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib”
export JAVA_HOME=”/java/jdk1.8.0_121“

输入
source /etc/environment是环境变量立即生效。

  1. 输入java -version显示成功则说明安装成功。

7.这个时候还没有结束,电脑重启之后就用不了了,所以还需要配置所有用户的环境变量

sudo vim /etc/profile

在文件的最后添加以下内容:

#set Java environment

export JAVA_HOME=/java/jdkXXX
export JRE_HOME=$JAVA_HOME/jre
export CLAsspATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLAsspATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

8.同样,需要使用命令使环境变量立即生效

source /etc/profile

至此JDK就安装成功了!!

eclipse 下载。。。。(逃。。。。

下载太慢 ,所以我觉得还是下载idea吧。。。。
可能这个原因使得idea份额变大的原因吧(逃。。。。
好了,下面是idea的下载安装

同样的道理。

  1. 官方下载IDEA,其中有一个是without JDK,但是我还是下载了含有JDK的版本,因为我怕后面事情多,毕竟新手,所以也建议大家下载一个比较全的版本吧。
  2. 移动到安装目录
  3. 解压

4.运行,在安装目录运行的bin目录执行。

`./idea.sh`

【Linux学习】Ubuntu下安装JDK以及配置环境,和eclipse的下载的更多相关文章

  1. Xcode:将WorkspaceSettings.xcsettings添加到源代码管理中

    在Xcode中,更改文件>中的设置.工作区设置…

  2. 在iOS模拟器中查看源代码?

    有没有人知道我可以在Apple的iOS模拟器中检查网站源代码的工具?像Firebug或Chrome开发者工具这样的东西会很棒,我还没有找到任何东西.解决方法之前的旧答案已被删除,因为它们包含过时的信息.至少使用Xcode4和Safari6,在iPhone模拟器中打开Web视图,然后切换到桌面Safari.在Safari的“开发”菜单中,您将找到“iPad模拟器”菜单,该菜单允许您为模拟器中打开的页面打开SafariWebInspector!

  3. ios – 如何在Xcode中创建机器人?获取“创建机器人需要一个受源代码控制的项目”.

    ]单击取消或配置遥控器会打开我的文件夹的配置,我看到我的遥控器添加得很好.我还尝试使用不同的名称再次添加远程存储库.我该如何前进?解决方法似乎这个问题发生在没有名为“origin”的远程时,因为这就是Xcode正在寻找的东西.当我将我的遥控器重命名为原点时,Xcode停止了抱怨,让我通过XcodeUI添加机器人.

  4. ios – 如何在Xcode中调试插件源代码?

    我是新手为AppleMail应用程序创建插件,我想为OSX创建AppleMail插件.我在Xcode中的“InstallerPlug-in”下创建了一个项目,但是我不能像简单的iOS应用程序一样调试该项目.可能吗?如果可能的话请帮助我.解决方法我找到了这个问题的解决方案.只需按照Xcode中的插件代码调试步骤操作即可.步骤1=转到Xcode中的编辑方案,然后转到Editscheme=>.步骤2=从侧窗口选择运行和信息选项卡,然后从下拉列表中选择可执行应用程序保持你的应用程序运行ant尝试调试你的插件源代码

  5. ios – 检查“NeXT / Apple typedstream”版本4(NSArchiver)类型的文件

    对于数据恢复程序,我需要能够从NSArchiver编写的文件中提取值类型,而无需访问Apple的CF/NS框架.OSXfile命令报告以下文件:是否有关于如何编码这些文件的文档,或者是否有人提出可以解析它们的代码?

  6. Xcode中的单个.swift文件是否可以包含iOS应用程序的完整源代码?

    换句话说,Xcode中的Swift代码可以像在Playground文件中那样运行吗?

  7. swift详解之二十--------在xcode中使用git管理源代码,将代码提交到github

    在xcode中使用git管理源代码,将代码提交到github本文记录一下如何在Xcode中使用Git作为源代码控制工具,以及如何将本地的Git仓库和远程Github上的仓库集成起来,虽然这章节和swift没有关系,但我还是放在这里。对详细的git操作可以看在Xcode中使用Git进行源码控制讲得很详细,很好。将xcode与github链接起来。

  8. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项目(三)

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。这里我在Perfect文件夹创建了一个Demo文

  9. 使用 Swift 语言编写 Android 应用入门

    Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。做梦,虽然Swift编译器可以胜任在安卓设备上编译Swift代码并运行。这需要的不仅仅是用Swift标准库编写一个APP,更多的是你需要一些框架来搭建你的应用用户界面,以上这些Swift标准库不能提供。简单来说,构建在安卓设备上使用的Swiftstdlib需要libiconv和libicu。通过命令行执行以下命令:gitclonegit@github.com:SwiftAndroid/libiconv-libi

  10. Project Perfect让Swift在服务器端跑起来-Hi Linux(二)

    开篇写了一个简单的入门,今天想说说怎么让Perfect项目在Linux上运行。Swift开源后,苹果让Swift不仅在OSX/iOS上跑,更让Swift在Linux/Windows上跑。作为服务端的Perfect框架+RemObjectSilver,让Swift成为了一个全栈语言。Perfect由于是服务端的,让Perfect在Linux上跑是必然的事情。从第一篇文章中我们可以了解到Perfect由PerfectLib和PerfectServer组成。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部