1.前言


如何看待Java上层技术与JVM?


你是否也遇到过这些问题?

  • 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!
  • 想解决线上JVM GC问题,但却无从下手。
  • 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了。
  • 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC,OOM等问题,一脸懵逼。

image.png
大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
就像我们平时在使用电脑的时候,会使用它来办公,玩游戏,却不知道它的原理,主机里面是如何组成的一样。

开发人员如何开袋上层框架

  • 一些有一定工作经验的开发人员,打心眼里觉得SSM,微服务等上层技术才是重点,基础技术并不重要,这其实是一种病态的“本末倒置”。
  • 如果我们把核心类库的API比做数学公式的话,那么Java虚拟机的知识就好比公式的推导过程。

image.png
计算机体系对我们来说越来越远,在不了解底层实现方式的前提下,通过高级语言很容易编写程序代码。但事实上计算机并不认识高级语言。

架构师每天都在思考什么?

  • 应该如何让我的系统更快
  • 如何避免系统出现瓶颈

image.png

我们为什么要学习JVM?


  • 面试的 需要(BATJ,TMD,PKQ等面试都爱问)
  • 中高级程序员必备技能

    1. 项目管理,调优的需要
  • 追求极客的精神

    1. 比如:垃圾回收算法,JIT,底层原理

    image.png

垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构,工作机制,是设计高扩展性应用和诊断运行时间问题的基础,也是Java工程师进阶的必备能力

2.面向人群和课程特点


  • 拥有一定开发经验的Java平台开发人员
  • 软件设计师,架构师
  • 系统调优人员
  • 有意i的那个的Java编程基础并希望进一步理解Java的程序员
  • 虚拟机爱好者,JVM实践者

官方规范下载和推荐书目

image.png
由于英语晦涩难懂,所以推荐看中文书籍,这样会更加舒服:
image.png

3.Java及JVM简介


程序语言排行榜查询地址https://www.tiobe.com/tiobe-index/

Java:跨平台的语言
image.png
JVM:跨语言的平台
image.png
image.png
简要的说,Java不是最强大的语言,但JVM是最强大的虚拟机

字节码

  • 我们平时说的Java字节码,职得使用Java语言编译成的字节码,准确的说任何能在JVM平台上执行的字节码格式都是一样的。所以应该统称为JVM字节码文件。
  • 不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。
  • Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式-Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他的辅助信息。

多语言混合编程

Java平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。
试想一下,在一个项目中,并行处理用Clojure语言编写,展示层使用JRuby/Rails,中间层则是Java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己语言的原生API一样方便,因为他们最终都运行在一个虚拟机上。
对这姓运行于Java虚拟机之上、Java之外的语言,来自系统的、底层的支持正在迅速增强、以JSR-292为核心的一系列项目和 功能改进(如Davinci Machine项目、Nashorn引擎、InvokeDynamic指令、java.lang.invoke包等),推动Java虚拟机从“Java语言的虚拟机”向“多语言虚拟机”的方向发展。

如何真正搞懂Java虚拟机
自己动手写一个,纸上得来终觉浅,得知此事要躬行。
image.png

4.Java及JVM历史上的重大事件

Java历史上的重大事件

image.png
image.png

OpenJDK和OracleJDK

image.png
在JDK11之前,oracleJDK中还会存在一些openJDK中没有的、闭源的功能。但在JDK11中,我们可以认为openJDK和OracleJDK代码实质上已经达到完全一致的程度。甚至于说后者比前者的代码更少,但在使用OpenJDK时,如果遇到一些bug时,需要更新JDK版本来解决,但OracleJDK会有长达5年的维护,OracelJDK在用于商业用途时,需要付费。

5.虚拟机与Java虚拟机