深入Java虚拟机(原书第2版)

(美)文纳斯

出版时间

2003-08-31

ISBN

9787111128052

评分

★★★★★
书籍介绍
这本书的真正价值,不在于教你怎么写Java,而在于让你想明白'为什么这么写'。读过的人普遍反馈:看完之后,垃圾回收不再是黑盒,类加载不再是抽象概念,连'为什么数组越界会抛异常''为什么Java没有delete'这类看似理所当然的设计,都有了底层依据。它像一份JVM内部的说明书,把执行引擎、字节码、栈、堆、方法区拆开讲清楚,甚至附录的指令集可以直接当手册查。需要提醒的是:翻译质量参差,部分章节读起来生涩,更适合有一定基础、愿意反复啃读的程序员。如果你满足于'会用',它可以跳过;但如果你想从'知其然'走向'知其所以然',这本书会重塑你对Java平台的理解。
作者简介
Bill Venners有14年编写软件专著的经验。他在硅谷的Artima软件公司提供软件咨询和培训服务。自1996年以来,他已经编写了40多篇有关Java技术的文章。他在《Java World杂志》辟有热闹专栏,介绍Java内部细节、面向对象设计技术和Jini技术。他还是artima.com的作者和网站管
AI导读
核心看点
  • 本书系统解析JVM底层架构,涵盖Java栈、堆、方法区及执行引擎等核心组件。深入讲解字节码指令集、Class文件格式、连接模型及动态扩展机制,帮助读者从源码到机器码的全链路理解Java程序运行原理,掌握虚拟机内部运作细节。
  • 详细阐述垃圾收集算法原理,包括垃圾对象检测机制与内存回收策略。通过根对象集合与可触及性分析,解释如何识别并回收无用对象。同时深入探讨线程同步机制、异常处理流程及finally子句实现,揭示Java内存安全与并发控制的底层保障。
  • 作为JVM规范的技术性解读,本书提供详尽的指令集参考与Class文件结构说明。虽然部分技术细节基于早期JDK版本,但其对虚拟机体系结构、平台无关性原理及类型安全机制的剖析依然具有极高价值,是理解Java底层机制的重要理论基石。
读者共识
  • 读者普遍认为本书是理解JVM底层机制的经典之作,尽管年代久远,但其对虚拟机架构、Class文件及指令集的解析依然具有不可替代的价值。许多读者表示,阅读后对Java运行原理有了质的飞跃,能够更深刻地理解代码执行过程,提升编程素养。
  • 大量读者批评本书中文译本质量较差,存在语句不通顺、术语翻译不准等问题,严重影响阅读体验。建议读者在条件允许的情况下阅读英文原版,或寻找其他翻译更佳的替代书籍。对于坚持阅读中文版者,需做好克服语言障碍的心理准备。
  • 部分读者指出本书内容过于偏向规范描述,缺乏现代JVM优化技术的讨论,且部分章节晦涩难懂,不适合初学者。但仍有忠实读者表示,通过反复研读并结合实践,最终获得了巨大收获,认为这是深入Java底层不可或缺的学习资料,值得投入时间。
精彩摘录
  • "在java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。但开始于main()的是非守护线程。 当程序中所有的非守护线程都终止时,虚拟机实例将自动退出。程序本身也能够通过调用runtime类或者system类的exit()方法来退出。"
  • "任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗认为是垃圾,因为他们不在影响程序的未来执行。 垃圾收集算法: 1、引用计数收集器(无法检测出循环,并且计数带来开销) 2、跟踪手机器 3、压缩收集器 4、拷贝收集器 5、按代收集的收集器 6、自适应收集"
  • "一个Java应用程序可以使用两种类装载器:”启动“类装载器和用户定义的类装载器。启动类装载器(这是系统中唯一的)是Java虚拟机实现的一部分。例如,如果Java虚拟机在已有操作系统上实现为C程序,那么启动类装载器就会是此C程序的一个部分。 Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类,例如,从网络上下载class文件。"
  • "1. 在Java中,没有通过使用强制转换指针类型或者通过进行指针运算直接访问内存的方法。在Java中使用对象时,需要严格地遵守类型规则。 2. 自动垃圾收集。Java和C++一样,有一个new操作,可以通过它来为新对象在堆中分配内存。但是和C++不同的是,Java并没有与new相对应的 delete操作符。在Java中,只需要停止对一个对象的引用,一段时间后,垃圾收集器户自动回收这个对象所占据的内存。垃圾收集器禁止Java程序员显式指明哪个对象应该被释放。 3. 数据边界检查。在Java中,数组是发展完备的对象,在每次使用数组的时候,Java都会检查数组的边界。当在Java中创建一个10个成员"
  • "JAVA体系结构包括四个独立但相关的技术: JAVA程序设计语言 JAVA class文件格式 JAVA应用编程接口(API) JAVA虚拟机 JAVA虚拟机和JAVA API 的组合除了 被称为JAVA运行时系统之外,还被称为JAVA平台。 JAVA虚拟机的主要任务是装载class文件并且执行其中的字节码。"
  • "对于C或C++来说,一个平台上的二进制可执行文件不能在其他平台上工作(因为这个二进制文件包含了目标处理器的机器语言)。而JAVA class文件时可以运行在任何支持JAVA虚拟机的硬件平台和操作系统上的二进制文件(JAVA编译器把JAVA源文件的指令翻译成字节码,这种字节码就是java虚拟机的“机器语言”)。 JAVA API 是运行库的集合,它提供一套访问主机系统资源的标准方法。 正是由于在每个特定的主机平台上都明确的实现了JAVA虚拟机和JAVA API,java程序本身就能够成为具有平台无关性的程序。"
  • "使用JAVA语言最引人瞩目的原因之一是,它能够提高开发者的效率;而他最主要的缺点在于执行速度较慢。 面向对象技术的承诺之一是提升代码的重用率,提高开发者的效率。 java保护内存完整性的方法: 1、由于JAVA在运行时强制执行严格的类型规则,根本无法以可能导致内存冲突的方式直接管理内存。因此,java程序中不会出现那些使C++程序员降低效率的特定的bug。 2、垃圾收集器(但它给程序运行时的性能加入了一些不确定性) note:在不同的虚拟机中,一个特定的java'chengxuzhong的对象可能在不同的事件被垃圾收集。 3、数组边界检查。在C++中数组操作实际上是指针运算,这会带来潜在的内存"
  • "1.3.1 Java虚拟机 不同的Java虚拟机中,执行引擎可能实现的非常不同。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另一种执行引擎更快,但是也更消耗内存,叫做“即时编译器”(Just-in-time compiler)。在这种情况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地代码,其他的代码由于使用得并不频繁,继续保留为字"
目录
译者序
前言
第1章 Java体系结构介绍
第2章 平台无关
第3章 安全

显示全部
用户评论
没有全懂。
经典之作,太老减一颗星,翻译减一颗星 2011读的第一本技术书
虽然就是把jvm规范翻译了一遍 看中文还是容易点啊
机器是怎么实现的?
通过阅读在Artima公开的样章可以看出原书非常不错,很可惜这本书被翻译得很糟,所以整体只能给三星了。
深入Java虚拟机(原书第2版)
本书勾连了规范和实现之间的距离,也是很多国内虚拟机讲解书的爸爸。十分不理解中文的为什么抄书把原书的精华给抄没了?
我特么现在全忘了,但是大二上半年捧着书看的日子好怀念
书本虽然比较老旧,但是对于虚拟机的知识讲的非常透彻,推荐
第一次读不觉得什么,再次读发现作者好厉害啊,复杂的问题,从头到尾娓娓道来,一气呵成。国内的书比如周志明老师写的,总感觉讲的断断不连续,一块知识一块知识往外吐,看不出他本来的面貌。这本书有个缺点就是太老了,后面很多章节基本不用看,比如垃圾回收,还有前面一些applet
下载
收藏