什么?美团 T9 首发内部 JVM 高级特性笔记,看完差距不止一点
在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机千差万别,而Java虚拟机则在千差万别的物理机上面建立了统-的运行平台,实现了在任意一台Java虚拟机上编译的程序,都能在任何其他Java虚拟机上正常运行。这一极大的优势使得Java应用的开发比传统C/C+ +应用的开发更高效快捷,程序员可以把主要精力放在具体业务逻辑,而不是放在保障物理硬件的兼容性上。通常情况下,一个程序员只要了解了必要的Java类库API、Java语法,学习适当的第三方开发框架,就已经基本满足日常开发的需要了。虚拟机会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。因此,了解虚拟机的运作并不是普通开发人员必备的,或者说首要学习的知识。
为什么这份笔记受到众多一线大厂架构师联袂推荐?
涵盖绝大部分互联网大厂面试知识点!助你顺利进大厂!
从Java技术体系、自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发5个维度全面分析JVM。
以实战为导向,通过大量与实际生产环境相结合的案例分析和展示了解决各种Java技术难题的方案和技巧。
来自阿里、腾讯、微软、百度、滴滴、易宝支付、同盾科技、达观数据、易观国际、蘑菇街的10位专家高度评价并强烈推荐。
值得所有Java技术人员读3遍,值得Java技术人员读3遍,值得读3遍!
由于这份笔记共计751页,没办法为大家全部展示出来,只能为大家展示部分内容供大家参阅
第一部分走近Java
第二部分自动内存管理
第三部分虚拟机执行子系统
第四部分程序编译与代码优化
第五部分高效并发
第1章走近Java
世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。
第2章Java内存区域与内存溢出异常
对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把控制内存的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误、修正问题将会成为-项异常艰难的工作。
本章是第二部分的第1章,笔者将从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题,这也是翻越虚拟机内存管理这堵围墙的第一步。
第3章垃圾收集器与内存分配策略
而Java堆和方法区这两个区域则有着很显著的不确定性:一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样,只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。垃圾收集器所关注的正是这部分内存该如何管理,本文后续讨论中的“内存”分配与回收也仅仅特指这一部分内存。
第4章虚拟机性能监控、故障处理工具
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括但不限于异常堆栈、虚拟机运行日志、垃圾收集器日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件) 等。恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、定位并解决问题的效率,但我们在学习工具前,也应当意识到工具永远都是知识技能的一层包装,没有什么工具是“秘密武器”,拥有了就能“包治百病”。
第5章调优案例分析与实战
考虑到虚拟机的故障处理与调优主要面向各类服务端应用,而大多数Java程序员较少有机会直接接触生产环境的服务器,因此本章还准备了一个所有开发人员都能够进行“亲身实战”的练习,希望大家通过实践能获得故障处理、调优的经验。
第6章类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
第7章虚拟机类加载机制
为了避免语言表达中可能产生的偏差,在正式开始本章以前,笔者先设立两个语言上的约定:
第一,在实际情况中,每个Class文件都有代表着Java语言中的-一个类或接口的可能,后文中直接对“类型”的描述都同时蕴含着类和接口的可能性,而需要对类和接口分开描述的场景,笔者会特别指明;
第二,与前面介绍Class文件格式时的约定- -致,本章所提到的“Class文件”也并非特指某个存在于具体磁盘中的文件,而应当是一串二进制字节流,无论其以何种形式存在,包括但不限于磁盘文件、网络、数据库、内存或者动态产生等。
第8章虚拟机字节码执行引擎
第9章类加载及执行子系统的案例与实战
在Class文件格式与执行引擎这部分里,用户的程序能直接参与的内容并不太多,Class文件 以何种格式存储,类型何时加载、如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户程序无法对其进行改变。能通过程序进行操作的,主要是字节码生成与类加载器这两部分的功能,但仅仅在如何处理这两点上,就已经出现了许多值得欣赏和借鉴的思路,这些思路后来成为许多常用功能和程序实现的基础。在本章中,我们将看一下前面所学的知识在实际开发之中是如何应用的。
第10章前端编译与优化
第11章后端编译与优化
第12章Java内存模型与线程
并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。
AmdahI定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力,摩尔定律则用于描述处理器晶体管数量与运行效率之间的发展关系。这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程。
第13章线程安全与锁优化
并发处理的广泛应用是AmdahI定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。
总结
这份笔记Java内核体系进行了系统梳理,详细地讲解了Java中的关键组件和体系,如Java的内存管理、JVM系统的全局体系、性能调优、高并发等,让读者可以非常全面地了解JVM的运行机制和调优原理。
100%免费获取方式:转发这篇文章+关注我,点击这里即可查看免费获取方式
版权声明: 本文为 InfoQ 作者【小Q】的原创文章。
原文链接:【http://xie.infoq.cn/article/435fab22327a6416fd0f70a19】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论