jdk1.6与1.7的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.6与1.7的区别?相关的知识,希望对你有一定的参考价值。

jdk1.7比jdk1.6添加了一些新的特性。

1、JDK1.7的新特性:

现在的 Java7也是采用了模块的划分方式来提速,一些不是必须的模块并没有下载和安装,因此在使用全新的Java7的虚拟机的时候会发现真的很快,当虚拟机需要用到某些功能的时候,再下载和启用相应的模块,这样使得最初需要下载的虚拟机大小得到了有效的控制。

2、JDK1.7与JDK1.6的变化

在JDK1.7的新特性方面主要有下面几方面的增强: 1.jdk7语法上 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头 。

3、Java 7的功能

编程方面,带来了很多令人激动的新功能,这将使你的应用程序具备更好的并行任务性能。

参考技术A JDK1.7的新特性:

首先是模块化特性:现在的 Java7也是采用了模块的划分方式来提速,一些不是必须的模块并没有下载和安装,因此在使用全新的Java7的虚拟机的时候会发现真的很快,当虚拟机需要用到某些功能的时候,再下载和启用相应的模块,这样使得最初需要下载的虚拟机大小得到了有效的控制。同时对启动速度也有了很大的改善。如果你对 OpenJDK的架构比较熟悉,你甚至可以定制JDK的模块。

其次是多语言支持:这里的多语言不是指中文英文之类的语言,而是说Java7的虚拟机对多种动态程序语言增加了支持,比如:Rubby、 Python等等。对这些动态语言的支持极大地扩展了Java虚拟机的能力。对于那些熟悉这些动态语言的程序员而言,在使用Java虚拟机的过程中同样可以使用它们熟悉的语言进行功能的编写,而这些语言是跑在功能强大的JVM之上的。

再有是开发者的开发效率得到了改善:Java7通过多种特性来增强开发效率。比如对语言本身做了一些细小的改变来简化程序的编写,在多线程并发与控制方面:轻量级的分离与合并框架,一个支持并发访问的HashMap等等。通过注解增强程序的静态检查。提供了一些新的API用于文件系统的访问、异步的输入输出操作、Socket通道的配置与绑定、多点数据包的传送等等。

最后是执行效率的提高,也是给人感觉最真切体验的特性:压缩了64位的对象指针,Java7通过对对象指针由 64位压缩到与32位指针相匹配的技术使得内存和内存带块的消耗得到了很大的降低因而提高了执行效率。此外还提供了新的垃圾回收机制(G1)来降低垃圾回收的负载和增强垃圾回收的效果。G1垃圾回收机制拥有更低的暂停率和更好的可预测性。

JDK,JRE,JVM的区别与联系

很多朋友跟我一样,已经使用Java开发很久了,可是对JDK,JRE,JVM这三者的区别与联系一直都是模模糊糊的,下面我们来总结一下。

JDK

Java Development ToolKit(Java开发工具包)。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具(javac/java/jdb)和Java基础类库(即Java API包括rt.jar)。最流行的JDK是sun公司发布的JDK,除了sun之外,还有好多公司和组织都开发了属于自己的JDK,例如国外的IBM和国内的淘宝都已经开发了属于自己的JDK,他们这样做主要是为了适应自己的需求,比如IBM的JDK据说运行效率就比sun的JDK要高得多,但不管怎么说,我们还是需要先把基础的sun JDK掌握好。

JDK一共有三个版本:

J2SE,standard edition,标准版,是我们通常用的一个版本。

J2EE,enterprise edition,企业版,使用这种JDK开发J2EE应用程序。

J2ME,micro edition,微型版,主要用于移动设备、嵌入式设备上的Java应用程序。

 

我们来看一下JDK的安装目录,在目录下面有六个文件夹、一个是src类库源码压缩包、和其他几个声明文件。其中,真正在运行Java时起作用的是以下四个文件夹:bin,include,lib,jre。现在我们可以看出这样一个关系,JDK包含JRE,其实还有另外一个关系就是JRE包含JVM。下面是JDK的目录结构:

bin:最主要的是编译器(javac.exe)

include:java和jvm交互用的头文件

lib:类库

jre:java运行环境

注:这里的bin,lib文件夹和jre里面的bin,lib是不同的。总的来说JDK是用于Java程序开发的,而JRE则是只能运行class而没有编译的功能。另外想Eclipse、idea等IDE都有自己的编译器而不是JDK bin目录中自带的,在安装时,只选中JRE的路径就可以了。

我们通常用JDK来指代Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些Java class,包括一些重要的语言结构以及基本的图形,网络和文件IO等等,我们在自己的程序中调用前辈们写好的这些class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好的或者功能更加强大的第三方类库来供我们使用。

 

JRE

Java Runtime Environment(Java 运行时环境)。也就是我们所说的Java平台,所有的程序都要在JRE下才能运行。包括JVM和Java核心类库和支持文件。与JDK相比,它不包含开发工具----编译器、调试器和其他工具。JRE是Java运行环境,光有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK安装目录里你可以找到JRE目录,里面有两个文件夹bin和lib,在这里可以简单的认为bin就是JVM,lib则是JVM工作时所需要的类库,而JVM和lib合起来就称为JRE。JRE是运行Java程序必不可少的,JRE的地位就像一台PC机一样,我们写好的win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要有JRE才能运行。JRE里面有一个JVM,JRE与具体的CPU结构和操作系统有关,我们从sun下载JRE的时候就看到了不同的版本,同JVM一起组成JRE的还有一些API(如awt,swing等)。

 

JVM

Java virtual Machine(Java虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。JAVA语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性,JVM对上层的Java源文件是不关心的,它关注的是由源文件生成的类文件(class file),类文件的组成包括JVM指令集,符号表以及一些辅助信息。

下图很好的表明了JDK,JRE,JVM三者之间的关系:

技术分享

Java的口号是"write once,Run anywhere"正是建立在JRE的基础上的,在Java应用程序和操作系统之间增加了虚拟层——JRE。程序源代码不是直接编译——>链接成机器代码【传统的编译方法,生成的机器代码不可避免的根据特定的操作系统和特定的机器结构相关】,而是先转换为字节码这种特殊的中间形式,字节码再转换成机器码或系统调用【Java 程序的字节码可以放到任意装有JRE的计算机运行,再由不同的JRE将他们转换成相应的机器代码,这就实现了Java程序的可移植性】

我们开发的实际情况是:我们利用JDK(调用Java API)开发了属于我们自己的Java程序后,通过JDK中的编译程序(javac)将我们的Java文件编译成Java字节码,在JRE上运行这些Java字节码,映射到CPU指令集或OS的系统调用。

 

以上是关于jdk1.6与1.7的区别?的主要内容,如果未能解决你的问题,请参考以下文章

从官网下载jdk1.6 1.7

jdk1.6与jdk1.8中String的intern()方法区别

jdk1.8下maven3.3.3报错版本不对.除了用jdk1.6,还有啥办法吗

为啥 Maven 使用 JDK 1.6 但我的 java -version 是 1.7

jdk1.7之前之后常量池的区别以及对itern的影响

从 Tomcat 6 JDK 1.6 迁移到 Tomcat 7 JDK 1.7 会话问题