二刷周先生的《深入理解JVM》时,没想到已经出了第三版,拿着第二版的我在风中凌乱....

第一次看这本书的时候是在19年的暑假前后,转眼即将到了20年的暑假,一年里,我也开始做了一些web开发上的工作,然而用到JVM的地方似乎仅仅限于开发环境和服务器的部署环境。这部分的知识偏理论,或者说,没有需要高强度优化JVM的场景。

不过,养兵千日用兵一时,技术不能等用时再去学,不管是未雨绸缪亦或是杞人忧天,我都决定结合第三版的内容重新整理一下之前的笔记。

再看前言

如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。

如果把编程比作开枪,那么掌握枪的原理就可能在卡壳的时候迅速解决问题,虽然枪不总是会出现问题。

不完美的程序

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程.

完成优于完美!

Java发展史

  • 1991.4 :Java语言前身Oak诞生

  • 1995.5:Oak语言改名为Java

  • 1996.1:JDK1.0发布,代表技术包括JVM,Applet,AWT

    • Applet是一种Java程序,需要嵌入在HTML中解释执行
    • AWT是早期的抽象窗口工具包,目前流行的有Swing,JavaFx
  • 1997.2:JDK1.1发布,代表技术有JAR文件格式,JDBC,内部类,反射

  • 2002.2:JDK1.4发布,新的技术有正则表达式,NIO,日志类

    • 正则表达式是对字符串操作的一种逻辑格式
    • NIO在IO的基础上增加了缓冲区,是一种非阻塞式的IO模型
  • 2004.9:JDK1.5发布,新的技术有自动装箱,泛型,注解,枚举,foreach循环

  • 2006.11:Sun公司宣布将Java开源,并建立了OpenJDK组织对源码进行管理。

  • 2009.4:Oracle以74亿美元收购Sun公司。

  • 2014.3:Oracle发布JDK1.8,新的特性有Lambda表达式,Stream API

  • 2017.9:JDK9发布,新特性有模块化系统,可交互的REPL工具,JIT,JVMCI等等

  • 2018.3:JDK10发布,新特性包括JEP286局部变量的类型推断,JEP317向G1引入Full GC

  • 2018.9:JDK11发布,新特性包括基于嵌套的访问控制,JavaFx被移除【JDK1.8有】

  • 2019.3:JDK12发布,新特性有低暂停时间的GC,微基准测试套件,Switch表达式。

JVM族谱

3.0版本加上了更加形象的比喻

  • 虚拟机始祖:Sun Classic,于96年在JDK1.0中发布
  • 武林盟主:HotSpot VM,目前使用最广泛的虚拟机,一直沿用至今
  • 小家碧玉:Mobile VM,面对移动领域和嵌入式市场,前景并不乐观
  • 天下第二:BEA公司的JRockit和IBM的J9,其中JRockit被Oracle收购后基本上停止更新了,J9仍然在沿用
  • 软硬合璧:BEA Liquid 运行于特定硬件的虚拟机,拥有更强大的性能

什么是广义的虚拟机?

虚拟机本质是一种软件,可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM)。

什么是Java虚拟机(JVM)?

JVM是一种将字节码转化为机器码的软件,从而实现Java语言跨平台的目的。

JVM科普的更多相关文章

  1. Hadoop科普文——常见的45个问题解答(CSDN)

    Hadoop科普文——常见的45个问题解答 1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2.  单机(本地)模式中的注意点? 在单机模式(standalon ...

  2. 【转】科普Spark,Spark是什么,如何使用Spark

    本博文是转自如下链接,为了方便自己查阅学习和他人交流.感谢原博主的提供! http://www.aboutyun.com/thread-6849-1-1.html http://www.aboutyu ...

  3. 科普:String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  4. JVM内存知识备忘

    又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...

  5. JVM进程状态监控

    前言 ========== 为什么需要做服务器jvm自动发现的监控呢?这个事情主要有两点原因: 1.zabbix默认监控jvm状态是使用jmx中转进行监控的,监控效率比较低下 2.zabbix使用jm ...

  6. 关键业务系统的JVM参数推荐(2018仲夏版) (强烈推荐 唯品会)

    年更贴,因为两年里遇到的事情,一些想法变了.也补充了不少VJTools的内容,比如为伸手党们准备的jvm-options.sh. 在关键的业务系统里,除了继续追求技术人员最爱的高吞吐与低延时之外,系统 ...

  7. 同步OR异步?WebFlux开发真的比Servlet开发要快?顺便再科普下CompletableFuture

    在看下文之前,先给大家科普一点基础知识 Runable:线程任务类接口,没有返回值 Callable:与上面的不同就是有返回值 Executor:定义了线程池执行任务的接口,不过只定义了Runable ...

  8. [转帖]支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么?

    支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么? https://mp.weixin.qq.com/s?__biz=MzA3OTg5NjcyMg==&mid=2661671930 ...

  9. 深入谷歌和甲骨文旷日持久的版权战争,趣味科普当前最火的编程语言JAVA的前世今生

    这篇文章是我在B站上投稿的一个科普java的视频文案,内容如标题,感兴趣的码农朋友可以移步观看https://www.bilibili.com/video/av81171108/ 在过去短短几十年间, ...

随机推荐

  1. POI2014 FAR-FarmCraft

    [Farm Craft] [题目描述] mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件 ...

  2. Django---进阶8

    目录 前后端传输数据的编码格式(contentType) ajax发送json格式数据 ajax发送文件 django自带的序列化组件(drf做铺垫) ajax结合sweetalert 批量插入 分页 ...

  3. ASP.NET CORE MVC用时分析工具MiniProfiler

    ASP.NET CORE MVC用时分析工具MiniProfiler MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析A ...

  4. day38 并发编程(理论)

    目录 一.操作系统发展史 二.多道技术 1 单核实现并发的效果 2 多道技术图解 3 多道技术重点 三.进程理论 1 必备知识点 2 进程调度 3 进程的三状态 4 两对重要概念 四.开启进程的两种方 ...

  5. day12 作业

    1.通用文件copy工具实现 with open("a.txt","r",encoding="utf-8") as f ,open(&quo ...

  6. 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰

    题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...

  7. python面试题三:Python 网络编程与并发

    1 简述 OSI 七层协议. OSI七层协议模型主要是: 应用层(Application):为用户的应用程序(例如电子邮件.文件传输和终端仿真)提供网络服务. 表示层(Presentation):使用 ...

  8. 08 Flask源码剖析之flask拓展点

    08 Flask源码剖析之flask拓展点 1. 信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作. pip3 install blinker 2. 根据flas ...

  9. hihoCoder 1051 补提交卡 最详细的解题报告

    题目来源:补提交卡 解题思路:假设未提交程序的天数为:a1,a2,....,an,补交的张数为M.依次从a1,a2,....,an中去掉连续的 K 天(0<=K<=M),然后再来计算剩余数 ...

  10. bzoj4716假摔

    bzoj4716假摔 题意: 给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵.n,m≤1000,k≤250000. 题解: 首先求出长为xmin,宽为ymi ...