前言:

Java是目前用户最多、使用范围最广的软件开发技术之一。Java 的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、 Java编程语言及许多第三方Java框架(如Spring、Struts 等)构成。在国内,有关Java API Java语言语法及第三方框”架的技术资料和书籍非常丰富, 相比之下,有关Java虚拟机的资料却显得异常贫乏。.这种状况在很大程度上是由Java开发技术本身的一-个重要优点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机器的情况千差万别,而Java虚拟机则在差万别的物理机上建立了统= -的运行平台,实现了在任意- - 台虚拟机上编译的程序都能在任何一台虚拟机上正常运行。这-极大优势使得Java应用的开发比传统CLC++应用的开发更高效和快捷,程序员可以把主要精力集中在具体业务逻辑上,而不是物理硬件的兼容性上。在一般情况下, 一个程序员只要了解了必要的Java API、Java 语法,以及学习适当的第三方开发框架,就已经基本能满足日常开发的需要了,虚拟机会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。因此,了解虚拟机的运作并不是一-般开发人员必须掌握的知识。然而,凡事都具备两面性。随着Java技术的不断发展,它被应用于越来越多的领域之中。其中-些领域,如电力、金融、通信等,对程序的性能、稳定性和可扩展性方面都有极高的要求。程序很可能在10个人同时使用时完全正常,但是在10 000个人同时使用时就会缓慢、死锁,甚至崩溃。毫无疑问,要满足10 000个人同时使用需要更高性能的物理硬件,但是在绝大多数情况下,提升硬件效能无法等比例地提升程序的运作性能和并发能力,甚至可能对程运作状况完全没有任何改善。这里面有Java虚拟机的原因:为了达到给所有硬件提供-致的虚拟平台的目的,牺牲了- -些与硬件相关的性能特性。更重要的是人为原因:如果开发大员不了解虚拟机- -些技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。其实,目前商用的高性能Java虚拟桃都提供了相当多的优化特性和调节手段,用于满足应用程序在实际生产环境中对性能和稳定性的要求。如果只是为了人门学习,让程序在自己的机器上正常运行,那么这些特性可以说是可有可无的;如果用于生产开发,尤其是企业级生产开发,就迫切需要开发人员中至少有一部分人对虚拟机的特性及调节方法具有很清晰的认识,所以在Java开发体系中,对架构师、系统调优师、高级程序员等角色的需求一直都非常大。学习虚拟机中各种自动运作特性的原理也成为了Java 程序员成长道路上必然会接触到的- -课。本书可以使读者以-一种相对轻松的方式学习虚拟机的运作原理,对Java程序员的成长也有较大的帮助。

第2版与第1版的区别

JDK 1.7在2011 年7月28日正式发布,相对于2006年发布的JDK 1.6,新版的JDK有了许多新的特性和改进。本书的第2版也相应地进行了修改和升级,把讲解的技术平台从JDK 1.6提升至JDK 1.7。例如,增加了对JDK 1.7中最新的G1收集器,以及JDK 1.7中JSR-292 knvokeDynamic (对非Java语言的调用支持)的分析讲解等内容。在第1版出版后,笔者收到了许多热心读者的反馈见,部分读者提出OpenJDK开源已久,第厂版却很少有直接分析OpenJDK源码的内容,有点“视宝山而不见”的感觉。因此,在本书第2版中,笔者特别加强了对这部分内容的讲解,其中在第1章中就介绍了如何分析、调试OpenJDK源码等。在本书后续章节中,不少关于功能点的讲解都直接使用OpenJDK中的HotSpot源码或者JIT编译器生成的本地代码作为论据。如何把Java虚拟机原理中许多理论性很强的知识、特性应用于实践开发,是本书贯穿始终的指。由于笔者希望在本书第2版中进一步加强知识的实践性,因此增加了许多对处理JVM常见问题技能的讲解,包括如何分析GC日志、如何分析JIT编译器代码优化过程和生成代码等。并且,在第1版的基础上,第2版中进一步增加了若干处理JVM问题的实践案例供读者参考。另外,本书第2版还修正了第1版中多处错的、有歧义的和不完整的描述。有关勘误信息,可以参考第1版的勘误页面(tp://icyfenix.iteye.com/blog/1119214)。

本书面向的读者

(1)使用Java技术体系的中、高级开发人员
Java虚拟机作为中、高级开发人员必须修炼的知识,有着较高的学习门槛,本书可作为学习虚拟机的优秀教材。
(2)系统调优师
系统调优师是近几年才兴起的职业,本书中的大量案例、代码和调优实战将会对系统调优师的日常工作有直接的帮助。
(3)系统架构师
保障系统的性能、并发和伸缩等能力是系统架构师的主要职责之-一,而这部分与嘘拟机的运作密不可分,本书可以作为他们制定应用系统底层框架的参考资料。

深入理解java虚拟机 (一) 第二版相关推荐

  1. 深入理解java虚拟机 (三) 第二版

    参考资料 本书名为"深人理解Java虚拟机",但要想深人理解虚拟机,仅凭- -本书肯定是远远不够的,读者可以通过以下信息找到更多关于Java虚拟机方面的资料.我在写作此书的时候,也 ...

  2. 深入理解java虚拟机 (二) 第二版

    如何阅读本书 本书-共分为五个部分:走近Java.自动内存管理机制.虛拟机执行子系统.程序编译与代码优化.高效并发.各部分基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何- -个感兴趣的专题 ...

  3. 深入理解Java虚拟机(第二版) 第六章:类文件结构

    第六章 类文件结构 6.1 概述 6.2 Class类文件结构 6.2.1 魔数与Class文件版本号 6.2.2 常量池 6.2.3 访问标志 6.2.4 类索引.父类索引和接口索引集合 6.2.5 ...

  4. 深入理解Java虚拟机(第二版) 第九章:类加载及执行子系统的案例与实战

    第九章 类加载及执行子系统的案例与实战 9.1 概述 9.2 Tomcat: 正统的类加载器架构 9.3 OSGi:灵活的类加载器架构 9.4 字节码生成技术与动态代理的实现 9.5 Retrotra ...

  5. 深入理解java虚拟机第一第二部分(周志明第三版)

    文章目录 深入理解java虚拟机(周志明第三版) 第一部分.Java的前世今生和未来展望 1.1.概述 1.2.java技术体系 1.3.Java发展史(只记录比较重要的) 1.4.Java虚拟机家族 ...

  6. 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析

    来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...

  7. 《深入理解Java虚拟机第3版》垃圾收集器与内存分配策略、虚拟机性能监控故障处理工具

    目录 往期博客:Java课堂篇3_初识JMM.常量池简单理解(字符串常量池.静态常量池.大整型常量池) 为什么要了解垃圾收集和内存分配? 如何判断对象已死? 引用计数算法 可达性分析算法 JDK1.2 ...

  8. 深入理解Java虚拟机 第2版 周志明著(三)

    第3章 垃圾收集器与内存分配策略 3.1 如何判定对象是"活着"或者"死去"? 引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当 ...

  9. 深入理解java虚拟机第3版 周志明

    白嫖yyds 链接:https://pan.baidu.com/s/1rnTj15Rw-BSXaUAfAz2xJg 提取码:ert3 复制这段内容后打开百度网盘手机App,操作更方便哦

最新文章

  1. 新型机器人模拟蜻蜓飞行可以乱真!
  2. 【MySQL性能优化】MySQL分库分表与水平分割取模案例(三)
  3. oracle pga的作用,浅析Oracle中PGA和UGA两者间的区别
  4. Java IO: RandomAccessFile
  5. 程序员面试金典 - 面试题 02.04. 分割链表
  6. 试试把OJ题意抽象成物理模型(洛谷P1007题题解,Java语言描述)
  7. Python入门--数据类型的转换
  8. html+css常用代码(前端必备)
  9. Google 翻译插件不能用了怎么办
  10. matlab残差分析取离散点,matlab残差分析图
  11. java获取文件大小的方法
  12. ubuntu终端下字体放大缩小快捷键
  13. 加速应用开发 | Firebase Summit 2021 精彩回顾
  14. html+text+shadow语法,text-shadow属性怎么用
  15. 游戏接入SDK系列之org.jf.util.ExceptionWithContext: Unsigned short value out of range
  16. 看得懂的猪周期,牧原们却不一定跨得过
  17. java解析excel合并单元格,100%好评!
  18. linux 时间 环境变量,Linux环境变量的修改(永久,暂时)以及修改ls显示的时间格式...
  19. from..import 语句
  20. python编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元 素降序排列,并输出结果。

热门文章

  1. github随时同步代码_GitHub代码下载和同步
  2. python里删除range里的数字_python中range函数与列表中删除元素
  3. android 自定义进度条_第一百八十九回:Android中自定义ProgressBar三
  4. Mac下配置sublime实现LaTeX
  5. linux18.04循环登陆,ubuntu18.04 循环登陆
  6. python 编译procto错误处理
  7. python启动c语言gdb,使用gdb调试python程序
  8. 【债券】可转换债券基本概念
  9. Android Studio下载、安装、配置及连接真机开发第一个App ——入门选手快进
  10. jdbc连接sqlserver,mysql,oracle