JVM科普
二刷周先生的《深入理解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科普的更多相关文章
- Hadoop科普文——常见的45个问题解答(CSDN)
Hadoop科普文——常见的45个问题解答 1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2. 单机(本地)模式中的注意点? 在单机模式(standalon ...
- 【转】科普Spark,Spark是什么,如何使用Spark
本博文是转自如下链接,为了方便自己查阅学习和他人交流.感谢原博主的提供! http://www.aboutyun.com/thread-6849-1-1.html http://www.aboutyu ...
- 科普:String hashCode 方法为什么选择数字31作为乘子
1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...
- JVM内存知识备忘
又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...
- JVM进程状态监控
前言 ========== 为什么需要做服务器jvm自动发现的监控呢?这个事情主要有两点原因: 1.zabbix默认监控jvm状态是使用jmx中转进行监控的,监控效率比较低下 2.zabbix使用jm ...
- 关键业务系统的JVM参数推荐(2018仲夏版) (强烈推荐 唯品会)
年更贴,因为两年里遇到的事情,一些想法变了.也补充了不少VJTools的内容,比如为伸手党们准备的jvm-options.sh. 在关键的业务系统里,除了继续追求技术人员最爱的高吞吐与低延时之外,系统 ...
- 同步OR异步?WebFlux开发真的比Servlet开发要快?顺便再科普下CompletableFuture
在看下文之前,先给大家科普一点基础知识 Runable:线程任务类接口,没有返回值 Callable:与上面的不同就是有返回值 Executor:定义了线程池执行任务的接口,不过只定义了Runable ...
- [转帖]支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么?
支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么? https://mp.weixin.qq.com/s?__biz=MzA3OTg5NjcyMg==&mid=2661671930 ...
- 深入谷歌和甲骨文旷日持久的版权战争,趣味科普当前最火的编程语言JAVA的前世今生
这篇文章是我在B站上投稿的一个科普java的视频文案,内容如标题,感兴趣的码农朋友可以移步观看https://www.bilibili.com/video/av81171108/ 在过去短短几十年间, ...
随机推荐
- 【华为云技术分享】跟唐老师学习云网络 : Kubernetes网络实现
当今K8s独霸天下之时,咱们站在更高的角度,好好的看看K8s网络是以什么理念构筑的.以及一个容器集群的好保姆,是如何分别照顾 南北流量和东西流量的. 一.简单介绍下Kubernetes 略..容器集群 ...
- pytest框架使用教程
Pytest框架 一.简介 pytest:基于unittest之上的单元测试框架 有什么特点? 自动发现测试模块和测试方法 断言更加方便,assert + 表达式,例如 assert 1 == 1 灵 ...
- vscode F2无法使用
rope库可能存在bug 解决方法: "python.jediEnabled": false //自动补全用微软自带
- Scala 基础(十二):Scala 函数式编程(四)高级(二)参数(类型)推断、闭包(closure)、函数柯里化(curry)、控制抽象
1 参数(类型)推断 参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以 ...
- 数据可视化之DAX篇(十五)Power BI按表筛选的思路
https://zhuanlan.zhihu.com/p/121773967 数据分析就是筛选.分组.聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特 ...
- Python之爬虫(二十) Scrapy爬取所有知乎用户信息(上)
爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...
- 深入理解JVM内存回收机制(不包含垃圾收集器)
目录 垃圾回收发生的区域 如何判断对象是否可以被回收 HotSpot实现 垃圾回收算法 JVM中使用的垃圾收集算法 GC的分类 总结 参考资料 垃圾回收发生的区域 堆是java创建对象的区域(Stri ...
- try-catch- finally块中, finally块唯一不执行的情况是什么?
除非在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);),否则不管在try块.catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总是会被执行的 ...
- Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
接上一篇 Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开始尝试使用 ...
- 使用SQL语句进行特定值排序
使用SQL语句进行查询时,对数据进行排序,排序要求为排序的一个字段中特定值为顶部呈现: select * from TableName order by case TableFieldName whe ...