其实,“为什么学Java虚拟机”这个问题,就和“为什么要学习数据结构和算法”是一个道理:工欲善其事,必先利其器。可以说,Java虚拟机就是每一位Java工程师进阶加薪的利器,你想往上升,你想深入技术,不想一直停留在简单开发,或者你在做Java性能分析、调优工作时,那么,Java虚拟机绝对是一把助力的利剑。
Java是目前用户最多、使用范围最广的软件开发技术,Java 的技术体系主要由支撑,Java程序运行的虚拟机、为各开发领域提供接口支持的Java API、Java 编程语言及许许多多的第三方Java框架(如Spring和Struts等)构成。在国内,有关Java API、Java 语言及第三方框架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏。
这种状况很大程度上是由Java开发技术本身的一个重要优点导致的:在虚拟机层而隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机器情况千差万别,而Java虚拟机则在千差万别的物理机上面建立了统一的运行平台, 实现了在任意一台虚拟机上编译的程序都能在任何一台虚拟机上正常运行。这一极大的优势使得Java应用的开发比传统C/C++应用的开发更高效和快捷,程序员可以把主要精力集中在具体业务逻辑上,而不是物理硬件的兼容性上。一般情况下,一个程序员只要了解了必要的Java API、Java 语法并学习适当的第三方开发框架,就已经基本能满足日常开发的需要了,虚拟机会在用户不知不觉中完成对硬件平台的兼容以及对内存等资源的管理工作。因此,了解虚拟机的运作并不是一般开发人员必须掌握的知识。
然而,凡事都具备两面性。随着Java技术的不断发展,它被应用于越来越多的领域之中。其中一些领域,如电力、金融、通信等,对程序的性能、稳定性和可扩展性方面都有极高的要求。一个程序很可能在10个人同时使用时完全正常,但是在10000个人同时使用时就会变慢、死锁甚至崩溃。毫无疑问,要满足10000个人同时使用需要更高性能的物理硬件,但是在绝大多數情况下,提升硬件效能无法等比例地提升程序的性能和并发能力,有时甚至可能对程序的性能没有任何改善作用。这里面有Java虚拟机的原因:为了达到为所有硬件提供一致的虛 拟平台的目的,牺牲了一些硬件相关的性能特性。更重要的是人为原因:开发人员如果不了解虚拟机的-些技术特性的运行原理,就无法写出最适合虚拟机运行和可自优化的代码。
其实,目前商用的高性能Java虚拟机都提供了相当多的优化特性和调节手段,用于满足应用程序在实际生产环境中对性能和稳定性的要求。如果只是为了入门学习,让程序在自己的机器上正常运行,那么这些特性可以说是可有可无的:如果用于生产环境,尤其是企业级应用开发中,就迫切需要开发人员中至少有一部分人对虚拟机的特性及调节方法具有很清晰的认识,所以在Java开发体系中,对架构师、系统调优师、高级程序员等角色的需求一直都非常大。学习虚拟机中各种自动运作的特性的原理也成为了Java程序员成长道路上必然会接触到的一课。
由于平台字数原因就不给大家展示《Java核心知识点了》需要这两本文档可以转发这篇文章并关注小编后私信“jvm”免费获取。
本书一共分为五个部分:走近Java.自动内存管理机制、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分基本上是相互独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分中的各个章节间有先后顺序。
本书的第一部分为后文的讲解建立了良好的基础。尽管了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必需的,但是这些准备过程可以为走近Java技术和Java虚拟机提供很好的引导。
第一章:介绍了Java技术体系的过去、现在和未来的发展趋势,并介绍了如何独立编译一个OpenJDK 7。
因为程序员把内存控制的权力交给了Java虚拟机,所以可以在编码的时候享受自动内存管理的诸多优势,不过也正因为这个原因,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作。
第2章:讲解了 虚拟机中的内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。
第3章:分析了垃圾收集的算法和JIDK1.6中提供的几款垃圾收集器的特点及运作原理,通过代码实例验证了Java虚拟机中的自动内存分配及回收的主要规则。
第4章:介绍了随 JDK发布的6个命令行工具与2个可视化的故障处理工具的使用方法。
第5章:与读者分享 了几个比较有代表性的实际案例,还准备了一个所有开发人员都能“亲身实战”的练习,读者可通过实践来获得故障处理和调优的经验。
执行子系统是虚拟机中必不可少的组成部分,了解了虚拟机如何执行程序,才能写出更优秀的代码。
第6章:讲解了 Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class的数据是如何存储和访问的。
第7章:介绍了 在类加载过程的“加载"、“验证"、“准备”、“解析”和“初始化”这五个阶段中虚拟机分别执行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。
第8章:分析了 虚拟机在执行代码时如何找到正确的方法,如何执行方法内的字节码,以及执行代码时涉及的内存结构。
第9章:通过四个类 加载及执行子系统的案例,分享了使用类加载器和处理字节码的一些值得欣赏和借鉴的思路,并通过一一个实战练习来加深对前面理论知识的理解。
Java程序从源码编译成字节码和从字节码编译成本地机器码的这两个过程,合并起来其实就等同于一个传统编译器所执行的编译过程。
第10章:分析了 Java语言中的泛型、自动装箱拆箱、条件编译等多种语法糖的前因后果,井通过实战案例演示了如何使用插入式注解处理器来实现一个检查程序命名规范的编译器插件。
第11章:讲解了虚拟机的热点探测方法、HotSpot 的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果。此外,还讲解了几种常见的编译器优化技术。
Java语言和虚拟机提供了原生的、完善的多线程支持,使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有与井发相关的处理,了解井发的内幕也是一个高级程序员不可缺少的课程。
第12章:讲解了 虚拟机的Java内存模型的结构和操作,以及原子性、可见性和有序性在Java内存模型中的体现,介绍了先行发生原则及使用,还讲解了线程在Java语言中是如何实现的。
第13章:介绍了线程安全所涉及的概念和分类、同步实现的方式以及虚拟机的底层运作原理,井且.还介绍了虚拟机实现高效并发所采取的一系 列锁优化措施。
由于平台字数原因就不给大家展示《Java核心知识点了》需要这两本文档可以转发这篇文章并关注小编后私信“jvm”免费获取。
Java不仅仅是一一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器和大型机等各种场合。时至今日Java技术体系已经吸引了600多万软件开发者,这是全球最大的软件开发团队。使用Java的设备多达几十亿台,其中包括8亿多台个人计算机、21 亿部移动电话及其他手持设备、35亿个智能卡,以及大量机顶盒、导航系统和其他设备。
Java能获得如此广泛的认可,除了因为它拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽视的优点;它摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想:它提供了一种相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题:它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能:它有一套完善的应用程序接口,还有无数的来自商业机构和开源社区的第三方类库来帮助实现各种各样的功能...所带来的这些好处让程序的开发效率得到了很大的提升。作为- .名Java程序员,在编写程序时除了尽情发挥Java的各种优势外,还应该去了解和思考一下Java技术体系中这些技术是如何实现的。认清这些技术的运作本质,是自己思考“程序这样写好不好”的基础和前提。当我们在使用一门技术时,如果不再依赖书本和他人就能得到这个问题的答案,那才算升华到了“不惑”的境界。