作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?
运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM!
- 想解决线上JVM GC问题,但却无从下手。
- 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了
- 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。
大部分Java开发人员,除去在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
- 一些有一定工作经验的开发人员,打心眼儿里觉得SSM、微服务等上层技术才是重点,基础技术并不重要,这其实是一种本末倒置的病态。
- 如果我们把核心类库的API比做数学公式的话,那么Java虚拟机的知识就好比公式的推导过程。
计算机系统体系对我们来说越来越远,在不了解底层实现方式的前提下,通过高级语言很容易编写程序代码。但事实上计算机并不认识高级语言
那么如何去学习JVM呢?市面上对于JVM讲解的资料零零碎碎,根本不成完整体系;去官网学习又无从下手,饱受打击。因此我将在这分享我精心收集的《JVM高级特性与最佳实践》
此笔由阿里大佬编写只流传于内部,几经波折终于到手,我已看完小半部分,确实不错特意在此分享,回馈小伙伴。这份笔记究竟写了些什么?下面我们一起来看看
Ps:由于内容较多,本次将展示部分,如果看得不过瘾想更加深入地了解本笔记彻底掌握 JVM 可在文末了解详情。
第一部分:走近Java
第一章介绍了Java技术体系的过去、现在和未来的一些发展趋势,并介绍了如何独立地编译一个OpenJDK 7
第二部分:自动内存管理机制
第二章讲解了虚拟机中内存是如何划分的,以及哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。
第三章分析了垃圾收集的算法和JDK1.7中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。
第四章介绍了随JDK发布的6个命令行工具与两个可视化的故障处理工具的使用方法。
第五章与读者分享了几个比较有代表性的实际案例,还准备了一个所有开发人员都能亲身实战”的练习,读者可通过实践来获得故障处理和调优的经验。
第三部分:虚拟机执行子系统
执行子系统是虚拟机中必不可少的组成部分,了解了虚拟机如何执行程序,才能写出更优秀的代码。
第六章讲解了 Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class 文件的数据是如何存储和访问的。
第七章介绍了类加载过程的“加载”、“验证”、“准备”、“解析”和“初始化”5个阶段中虚拟机分别执行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。
第八章分析了虚拟机在执行代码时如何找到正确的方法,如何执行方法内的字节码,以及执行代码时涉及的内存结构。
第九章通过4个类加载及执行子系统的案例,分享了使用类加载器和处理字节码的一些值得欣赏和借鉴的思路,并通过一个实战练习来加深对前面理论知识的理解。
第四部分:程序编译与代码优化
Java程序从源码编译成字节码和从字节码编译成本地机器码的这两个过程,合并起来其实就等同于一个传统编译器所执行的编译过程。
第十章分析了Java语言中泛型、主动装箱和拆箱、条件编译等多种语法糖的前因后果,并通过实战演示了如何使用插入式注解处理器来实现-一个检查程序命名规范的编译器插件。
第十一章讲解了虚拟机的热点探测方法、HotSpot 的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果,此外,还讲解了几种常见的编译优化技术。
第五部分:高效并发
Java语言和虚拟机提供了原生的、完善的多线程支持,这使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有并发相关的处理,了解并发的内幕也是成为一个高级程序员不可缺少的课程。
第十二章讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现,介绍了先行发生原则的规则及使用,还了解了线程在Java语言中是如何实现的。
第十三章介绍了线程安全涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所采取的系列锁优化措施。
总结
Java技术的通用性、高效性、平台移植性和安全性使之成为网络计算的理想技术,从普通的PC到数据中心、从游戏控制台到科学超级计算机、从手机到互联网,Java技术无处不在。 Java虚拟机正是支撑和实现这一切的秘密武器,它使得Java成为一个强大的、一致的、 稳定的、广阔的运行平台。
“技术原理"和“实战运用”两条主线贯穿整份笔记,在讲解Java虚拟机的工作原理和核心知识的同时,还用通俗的语言和具有代表性的案例讲述了Java虚拟机中与应用程序开发关系最为密切的内容。通过阅读这份笔记,大家可以用一种相对较轻松的方式来学习和探索Java虚拟机运作的秘密。
如果你还没有掌握JVM高级特性,现在想要在最短的时间里吃透它,可以点击传送门来获取完整资料~