ubuntu使用openjdk好还是sunjdk强?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu使用openjdk好还是sunjdk强?相关的知识,希望对你有一定的参考价值。

  ubuntu下用openjdk要比sunjdk好。
  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社区所希望的。
参考技术A java本来就是sun开发的
open那个是社区做的
当然是官方的好啦
兼容性强,不容易出BUG本回答被提问者采纳
参考技术B openjdk商业性广泛,源于其开源策略;
sunjdk学术性强,源于其封闭策略.
openjdk封装的东西较少,接近java本源;
sunjdk封装了很多东西,风骚妖娆.
用什么看您做什么用了.
如果只是学习java,还是希望使用OpenJDK.
参考技术C 现在open版的jdk做得已经很不错了,如果不是做开发的没必要装sun的jdk,openjdk足够了!

OpenJDK 源码目录结构

SunJDK 中的 src.zip 文件是 Java 类库的源码,Oracle 仅开源了类库。若想要了解 native 方法的实现和 JDK 的实现,则需要查看 OpenJDK 的源码。

OpenJDK 是 SunJDK 的开源版本,由于版权原因,SunJDK 中的部分代码并未开放给 OpenJDK 使用,因此 OpenJDK 的源代码并不完整,只包含最精简的 JDK。但从 JDK7 开始,OpenJDK 作为了开发主干,SunJDK 在这个基础上发布。因此它们之间的大部分源码都相同,其差别几乎可以不计。

OpenJDK 源码的目录结构如下图所示:
技术分享图片

  • corba,不常用的多语言、分布式通讯接口。

    全称为 Common Object Request Broker Architecture(通用对象请求代理架构),基于对象-服务机制设计,类似于 JavaBean 和微软的 COM 技术。

  • hotspot,JVM 实现。
  • jaxp,XML 处理。

    全称为 Java API for XML Processing,是用于处理 XML 的 Java API,提供了解析和验证 XML 文档的能力。

    JAXP 提供了三种接口来处理 XML 文档:

    DOM 接口(文档对象模型解析),其源码位于 \jaxp\src\org\w3c\dom 目录。

    SAX 接口(XML 简单 API 解析),其源码位于 \jaxp\src\org\xml\sax 目录。

    StAX 接口(XML 流 API),其源码位于 \jaxp\src\javax\xml 目录。

    除了解析接口,JAXP 还提供了 XSLT 接口用来对 XML 文档进行数据和结构的转换。

    其源码位于 \jaxp\src\javax\xml\transform 目录。

  • jaxws,一组 XML Web Services 的 Java API。

    全称为 Java API for Web Services,JAX-WS 允许开发者选择面向 RPC(RPC-oriented)或是面向消息(Message-oriented)的方式来实现自己的 Web Services。

  • jdk,JDK 实现。
  • langtools,Java 语言工具。

    包含 javac、javap 等实用程序的源码。

  • nashorn,JVM 上的 JavaScript 运行时。

    基于 JSR-223 协议,Java 开发者可在 Java 程序中嵌入 JavaScript 代码。

jdk 目录包含了 JDK 的实现,JDK 的实现源码位于 jdk\src\share 目录,其目录结构如下图所示:
技术分享图片

  • 其中 classes 目录包含的是 Java 实现,native 目录包含的是 C++ 实现。

    这两个目录的结构与 Java 包相对应。

  • sample 和 demo 目录包含一些示例。
  • back、instrument、javavm、npt、transport 等目录包含了实现 Java 的基础部分的 C++ 源码,在这里可以从最底层理解 Java。

hotspot 目录包含了 JVM 的实现, HotSpot VM 的实现源码位于 jvm\src 目录,其目录结构如下所示:

-src
 |-cpu CPU 相关代码(实现汇编器、模板解释器、ad 文件和部分 runtime 函数)
 |-os 操作系相关代码
 |-os_cpu 操作系统和 CPU 组合的相关代码
 |-share 平台无关的通用代码
   |-tools 工具
   | |-hsdis 反汇编插件
   | |-IdealGraphVisualizer 将 server 编译器的中间代码可视化的工具
   | |-LogCompilation 将 -XX:+LogCompilation 输出的日志(hotspot.log)整理成更更具可读性格式的工具
   | |-ProjectCreator 生成 Visual Studio 的 project 文件的工具
   |
   |-vm HotSpot VM 的核心代码
     |-adlc 平台描述文件(cpu 或 os_cpu 目录中的 *.ad 文件)的编译器
     |-asm 汇编器接口
     |-c1 Client 编译器(即 C1)
     |-ci 动态编译器的公共服务(从动态编译器到 VM 的接口)
     |-classfile 处理类文件(包括类加载和系统符号表等)
     |-code 管理动态生成的代码
     |-compiler 从 VM 调用动态编译器的接口
     |-gc_implementation GC 实现
     | |-concurrentMarkSweep Concurrent Mark Sweep GC 的实现
     | |-g1 Garbage-First GC 的实现
     | |-parallelScavenge ParallelScavenge GC 的实现(Server VM 的默认 GC)
     | |-parNew ParNew GC 的实现
     | |-shared GC 的通用实现
     |
     |-gc_interface GC 接口
     |-interpreter 解释器,包括模板解释器(官方版使用)和 C++ 解释器(官方版未用)
     |-libadt 一些抽象数据结构
     |-memory 内存管理相关实现(老的分代式 GC 框架也位于此处)
     |-oops HotSpot VM 的对象系统的实现
     |-opto Server 编译器(即 C2)
     |-precompiled 
     |-prims HotSpot VM 的对外接口,包括部分标准库的 native 部分实现和 JVMTI 实现
     |-rumtime 运行时支持库(包括线程管理、编译器调度、锁、反射等)
     |-services 用于支持 JMX 之类的管理功能的接口
     |-shark 基于 LLVM 的 JIT 编译器(官方版未用)
     |-trace 
     |-utilities 一些基本工具类


以上是关于ubuntu使用openjdk好还是sunjdk强?的主要内容,如果未能解决你的问题,请参考以下文章

OpenJDK 源码目录结构

linux下如何使用自己安装的SunJDK替换默认的OpenJDK

Diamond Operator 在 OpenJDK 而非 SunJDK 7 下编译

在Ubuntu中通过update-alternatives切换软件版本

CentOS卸载原有旧版OPENJDK并安装SUNJDK解决方案

OpenJDK和JDK区别(转)