美文网首页
chapter-1 初识JVM

chapter-1 初识JVM

作者: bryant_gbw | 来源:发表于2017-11-28 21:32 被阅读0次


    本章知识点

    1.JVM的概念

    2.JVM发展历史 

    3.JVM种类

    4.Java语言规范

    5.JVM规范

    初识JVM - JVM概念

    JVM是Java Virtual Machine的简称,意为Java虚拟机

    虚拟机:指通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整的计算机系统。

    有哪些虚拟机:VMWare、Visual Box、JVM。

    VMWare或者Virtual Box都是使用软件模拟物理CPU的指令集。

    JVM使用软件模拟Java字节码的指令集。

    JNI(Java Native Interface):java与其他语言(C/C++)通信的API。

    初识JVM  -  Java和JVM的历史

    1996年SUN JDK 1.0 Classic VM:纯解释运行,使用外挂进行JIT(Just In Time),java的口号write once run anywhere。

    1997年 JDK 1.1: 发布AWT,内部类,JDBC,RMI,反射。

    1998年 JDK 1.2 Solaris Exact VM:JIT解释器混合;Accurate Memory Management(精确内存管理),数据类型敏感;提升GC(Gabage Collection)性能。JDK 1.2 开始称为Java 2 J2SE J2EE J2ME,加入swing,collection

    2000年 JDK 1.3 HotSpot :作为默认虚拟机发布,加入JavaSound。

    2002年 JDK 1.4: Classic VM退出历史舞台加入Asset正则表达式,NIO,IPV6日志,加密类库。

    2004年发布 JDK 1.5 即JDK5、J2SE 5、Java 5:加入泛型,注解,装箱,枚举,可变长的参数,Foreach循环,java.util.concurrent并发包。

    2006年 JDK1.6 JDK6:脚本语言支持,JDBC4.0,Java编译器API

    2011年 JDK 7 发布:延误项目推出到JDK 8 ,动态语言增强,64位系统中的压缩指针,NIO2.0,在java.util.concurrent中加入fork/join是对并发包的一个补充。

    2014年 JDK 8 发布:Lambda表达式,语法增强,Java类型注解。

    2016年 JDK 9 :模块化。  

    初识JVM - Java和JVM的历史 - 大事件

    使用最为广泛的JVM为HotSpot。

    HotSpot为Longview Technologies开发 被SUN收购。

    2006年 Java开源 并建立OpenJDK,对java源码进行管理:HotSpot 成为Sun JDK和OpenJDK中所带的虚拟机,名字从之前的J2变为Java SE。

    2008 年 Oracle收购BEA:得到JRockit VM。

    2010年Oracle 收购 Sun:得到Hotspot。

    Oracle宣布在JDK8时整合JRockit和Hotspot,优势互补:在Hotspot基础上,移植JRockit优秀特性。

    KVM:由SUN发布,在IOS Android出来之前,广泛用于手机系统。

    CDC/CLDC HotSpot:用于手机、电子书、PDA等设备上建立统一的Java编程接口;J2ME的重要组成部分。

    JRockit:BEA。

    IBM J9 VM:在IBM内部使用。

    Apache Harmony:兼容于JDK 1.5和JDK 1.6的Java程序运行平台;与Oracle关系恶劣 退出JCP ,Java社区的分裂;OpenJDK出现后,受到挑战 2011年 退役;没有大规模商用经历;对Android的发展有积极作用。

    初识JVM - 规范

    Java语言规范:语法、变量、类型、方法。

    JVM规范:Class文件类型,运行时数据,帧栈,虚拟机的启动,虚拟机的指令集。

    初识JVM - Java语言规范

    语法定义:

        IfThenStatement:if ( Expression ) Statement;

        ArgumentList:Argument、ArgumentList。

    词法结构:

        \u + 4个16进制数字:表示UTF-16;

        行终结符:CR, or LF, or CR LF;

        空白符:空格 tab \t 换页 \f 行终结符;

        注释、标示符、关键字;

        Int:0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF;

        Long:0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L;

        Float:1e1f 2.f .3f 0f 3.14f 6.022137e+23f;

        Double:1e1 2. .3 0.0 3.14 1e-9d 1e137;

        操作:+=  -=  *=  /=  &=  |=  ^=  %=  <<=  >>=  >>>=。

    类型和变量:

        元类型:byte short int long float char boolean double

        泛型。

    Java内存模型,类加载链接的过程,public static final abstract的定义,异常,数组的使用......

    初识JVM - JVM规范

    Java语言规范定义了什么是Java语言。

    Java语言和JVM相对独立:Groovy、Clojure、Scala。

    JVM:主要定义二进制class文件和JVM指令集等。

    Class文件格式。

    数字的内部表示和存储:Byte  -128 to 127......

    returnAddress 数据类型定义:指向操作码的指针,不对应Java数据类型,不能在运行时修改,Finally实现需要。

    定义PC。

    堆、栈。

    方法区。

    整数的表达:

        原码:第一位为符号位(0为正数,1为负数);

        反码:符号位不动,原码取反;

        负数补码:符号位不动,反码加1;

        正数补码:和原码相同。

    VM指令集:

        类型转化(l2i);

        出栈入栈操作:aload astore;

        运算:iadd isub;

        流程控制:ifeq ifne;

        函数调用:invokevirtual invokeinterface invokespecial invokestatic。

    JVM需要对Java Library 提供以下支持:反射 java.lang.reflect,ClassLoader,初始化class和interface,安全相关 java.security,多线程,弱引用。

    JVM的编译:源码到JVM指令的对应格式,Javap,JVM反汇编的格式。

    JDK(Java Development Kit)

            Jdk是java程序设计语言,java虚拟机,java API类库的统称,jdk是支持java程序运行,开发的最小环境。

    JRE(Java Runtime Environment)

            我们把java api类库中的java se的子集和java虚拟机称为jre,jre是支持java程序运行的标准环境。

    JDK和JRE所覆盖的范围

    java技术体系分为四个平台

    Java card:支持一些java小程序(applets)运行在小内存设备(智能卡)上面的平台。

    Java ME(micro edition):支持java程序运行在移动终端(手机,PDA)上的平台,对java api有所精简,并加入了针对移动终端的支持,之前称为J2ME,从jdk1.6之后修改。

    Java SE(standar edition):支持面向桌面级的应用(如windows下的应用程序)的平台,提供Java核心API,之前称为J2SE。

    Java EE(enterprise edition):支持使用多层应用构架的java平台,除了提供java se api外,还对其做了大量的扩充,也支持部署,之前称为J2EE。

    Coin项目

            自2009年1月起,Coin便是Java7(和Java8)中一个开源的子项目,创建coin项目是为了反映java语言中的微小变动,项目的名字是个双关语——像硬币一样小的变化(small change comes as coins),而“套用一句老话”(to coin a phrase)指的是给Java语言添一个新的表述方式。

    相关文章

      网友评论

          本文标题:chapter-1 初识JVM

          本文链接:https://www.haomeiwen.com/subject/oiqybxtx.html