JVM基础系列学习笔记

JVM基础学习,主要参考:陈树义JVM基础 ,并总结归纳

开篇:为什么要学虚拟机?

  • 学习 Java 虚拟机能深入地理解 Java 这门语言
    深入到字节码层次才能深入研究java细节,字节码 ==》 虚拟机的一部分
  • 学习虚拟机是为线上排查问题打下基础
    除去网络、系统本身问题,很多时候 Java 应用出现问题,就是 Java 虚拟机的内存出现了问题。要么是内存溢出了,要么是 GC 频繁导致响应慢等等。 ==》得懂 GC 日志

第1讲:Java 语言的前世今生

JRE、JDK、J2SE、Java SE 与 Java SE

JREJDKJ2SEJava SEJava SE
Java运行环境Java 开发工具包Java 2 标准版技术体系Java 2 企业版技术体系Java 2 嵌入式技术体系
Java Runtime EnvironmentJava Development KitJava 2 Standard EditionJava 2 Enterprise EditionJava 2 Micro Edition
仅包含运行 Java 程序的必需组件,包括 Java 虚拟机以及 Java 核心类库等JRE + 一系列开发、诊断工具 (即一个核心库、开发工具、诊断工具的合集)JDK +,包含构成 Java 语言核心的类,例如:数据库连接、网络编程、接口定义等。J2SE 中的类 +,还包含用于开发企业级应用的类,比如:Servlet、JSP、EJB 等。包含 J2SE 中的类(SE/EE/ME都是技术体系)
仅运行Java程序开发Java程序桌面应用软件的编程分布式的网络程序的开发,如电子商务网站等主要用于消费类电子产品的软件开发,例如:手机、PDA、寻呼机等。

Java 历史

在 1991 年,James Gosling 博士发布了 Oak,这个是 Java 语言的前身。但一直到 1995 年的时候,Oak 语言才改名为 Java。

年份版本不同
1991前身James Gosling 博士发布产品 Oak
1995JavaOak 语言改名为 Java
1996JDK1.0提供了纯解释执行的 Java 虚拟机实现:Sun Classic VM
1997JDK1.1新增了JDBC、JavaBeans、内部类、反射
1998JDK1.2Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系
2000JDK1.3默认的 Java 虚拟机由 Sun Classic VM 改为 HotSopt
2002JDK1.4新增了正则表达式、NIO等 Java 真正走向成熟
2004JDK1.5对语法易用性做了很大改进,新增了泛型、枚举等,代表技术:并发包等
2006JDK1.6将 J2EE/J2SE/J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6
2009-Sun 公司因为经营不善被 Oracle 公司收购
2011JDK1.7JDK1.7、JDK1.8 新特性(全)
2013JDK1.8JDK1.7、JDK1.8 新特性(全)

粗略总结:

  1. jdk1.5 新特性
    • foreach循环
    • 自动装拆箱:基本数据类型和他的包装类自动转换,Integer.valueOf Integer.intvalue;
    • 泛型:其实是类型擦除,编译完类型就没了,执行方法又回到了原来的类型强转
    • 可变参数
  2. jdk1.7 新特性
    • 可以通过[], {}的形式向集合内添加元素
    • switch 支持string类型数据
  3. jdk1.8 新特性
    • 接口可用default关键字添加非抽象方法
    • lambda表达式:以前java集合是不能够进行内部迭代的,只能用循环外部迭代==》lambda来了
    • 函数式接口:指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。(每一个lambda表达式都对应一个类型,通常是接口类型)。jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。jdk1.8新特性总结
    • 方法与构造函数引用:Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:converter = something::startsWith; (不常用,不懂啊。。)
    • 定义可重复的注解:在Java 5中使用注解有一个限制,即相同的注解在同一位置只能声明一次。Java 8引入重复注解,这样相同的注解在同一地方也可以声明多次。重复注解机制本身需要用@Repeatable注解。Java 8在编译器层做了优化,相同注解会以集合的方式保存,因此底层的原理并没有变化。
    • 流等等…
      在这里插入图片描述

第2讲:Java 虚拟机的历史

JDK 版本升级不仅仅体现在语言和功能特性上,还包括了其编译和执行的 Java 虚拟机的升级。

  • 1996 年,JDK 1.0 发布时,提供了纯解释执行的 Java 虚拟机实现:Sun Classic VM
  • 1997 年,JDK 1.1 发布时,虚拟机没有做变更,依然使用 Sun Classic VM 作为默认的虚拟机。
  • 1998 年,JDK 1.2 发布时,提供了运行在 Solaris 平台的 Exact VM 虚拟机,但此时还是用 Sun Classic VM 作为默认的 Java 虚拟机。
  • 2000 年,JDK1.3 发布,默认的 Java 虚拟机由 Sun Classic VM 改为 Sun HotSopt VM,而 Sun Classic VM 则作为备用虚拟机。
  • 2002 年,JDK 1.4 发布,Sun Classic VM 退出商用虚拟机舞台,直接使用 Sun HotSpot VM 作为默认虚拟机一直到现在。

从 Sun Classic、Sun Exact VM、Sun HotSpot VM,再到 BEA JRockitIBM J9 VM,这几个虚拟机可以说是虚拟机的正史了,最后的赢家:Oracle。
在 2010 年,Oracle 公司收购了 Sun 公司,这样 Oracle 就拥有了 HotSpot VM。再加上其在 2008 年收购 BEA 公司获得的 JRocket VM,Oracle 公司就拥有了地球上最优秀的两款虚拟机。Oracle 还宣布会将 JRockit 的优秀特性整合到 HotSpot VM 中,例如移植 JRockit 的垃圾回收器和 MissionControl 服务。

第3讲:到底什么是虚拟机?

与其他语言不同,Java 语言并不直接将代码编译成与系统有关的机器码,而是编译成一种特定的语言规范,这种语言规范我们称之为字节码。无论 Java 程序要在 Windows 系统,还是 Mac OSX 系统,抑或是 Linux 系统,它首先都得编译成字节码文件,之后才能运行。

但即使编译成字节码文件了,各个系统还是无法明白字节码文件的内容,这时候就需要 Java 虚拟机的帮助了。Java 虚拟机会解析字节码文件的内容,并将其翻译为各操作系统能理解的机器码。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值