出版社: 机械工业出版社
原作名: Inside the Java Virtual Machine
译者: 曹晓钢 / 蒋靖
出版年: 2003-9
页数: 461
定价: 58.00元
装帧: 平装
丛书: Sun公司核心技术丛书
ISBN: 9787111128052
内容简介 · · · · · ·
本书作者曾因本书荣获专业技术杂志《Java Report》评选的优秀作者奖,细心的读者可以从网上找到许多对本书第1版的赞誉。作者以易于理解的方式深入揭示了Java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!
本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘,光盘中包含用以辅助说明正文内容的交互式例示applet及示例源代码。
作者简介 · · · · · ·
Bill Venners有14年编写软件专著的经验。他在硅谷的Artima软件公司提供软件咨询和培训服务。自1996年以来,他已经编写了40多篇有关Java技术的文章。他在《Java World杂志》辟有热闹专栏,介绍Java内部细节、面向对象设计技术和Jini技术。他还是artima.com的作者和网站管
目录 · · · · · ·
前言
第1章 Java体系结构介绍
第2章 平台无关
第3章 安全
第4章 网络移动性
第5章 Java虚拟机
第6章 Java class文件
第7章 类型的生命周期
第8章 连接模型
第9章 垃圾收集
第10章 栈和局部变量操作
第11章 类型转换
第12章 整数运算
第13章 逻辑运算
第14章 浮点运算
第15章 对象和数组
第16章 控制流
第17章 异常
第18章 finally子句
第19章 方法的调用与返回
第20章 指令invokespecial
第21章 线程同步
附录A 按操作码助记符排列的指令集
附录B 按功能排列的操作码助记符
附录C 按操作码字节值排列的操作码助记符
附录D Java虚拟机的一个模拟:“Slices of Pi”
· · · · · · (收起)
原文摘录 · · · · · · ( 全部 )
-
在java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。但开始于main()的是非守护线程。 当程序中所有的非守护线程都终止时,虚拟机实例将自动退出。程序本身也能够通过调用runtime类或者system类的exit()方法来退出。 (查看原文) —— 引自第86页 -
任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗认为是垃圾,因为他们不在影响程序的未来执行。 垃圾收集算法: 1、引用计数收集器(无法检测出循环,并且计数带来开销) 2、跟踪手机器 3、压缩收集器 4、拷贝收集器 5、按代收集的收集器 6、自适应收集器 7、火车算法 (查看原文) —— 引自第240页
> 全部原文摘录
丛书信息
喜欢读"深入Java虚拟机(原书第2版)"的人也喜欢的电子书 · · · · · ·
喜欢读"深入Java虚拟机(原书第2版)"的人也喜欢 · · · · · ·
深入Java虚拟机(原书第2版)的书评 · · · · · · ( 全部 21 条 )

深入java虚拟机第二版阅读笔记
这篇书评可能有关键情节透露
http://www.artima.com/jvm/booklist.html 《Inside the Java Virtual Machine 2version》 http://www.artima.com/insidejvm/ed2/index.html 《The Java Virtual Machine Specification 第二版/第三版》 http://java.sun.com/docs/books/jvms/ Java虚拟机原... (展开)
对于理解JVM很有帮助

好的程序员不应该只会调用API

Javaer 进阶必读
这篇书评可能有关键情节透露
后面附录搞了100多页,1/4篇幅,注水略严重,不过光凭前300多页,本书还是值得肯定 如果你对java还是有些了解的话,(比如我,另外本书也不适合java初学者),建议阅读重点如下: 5,6,7,8最值得一看,让你充分了解java class文件包含哪些内容,如何被jvm运行,如何链接, 栈... (展开)
评论深入Java虚拟机(原书第2版)
> 更多书评 21篇
-
java语言提供了两种内置方式来标志监视区域:同步语句及同步方法。这两个机制实现了同步的互斥,是被java虚拟机的指令集支持的。 同步语句: void rever() { synchronized(this) { ... } } “ 在上面的例子中,如果没有获得对当前对象(this)的锁,同步块内的语句是不会被执行的。 方法内的同步语句块会使用monitorenter和monitorexit这两个操作码来实现同步。 操作码 操作数 描述 monitorent...
2013-11-25 17:20:50 3人喜欢
java语言提供了两种内置方式来标志监视区域:同步语句及同步方法。这两个机制实现了同步的互斥,是被java虚拟机的指令集支持的。 同步语句: void rever() { synchronized(this) { ... } } “ 在上面的例子中,如果没有获得对当前对象(this)的锁,同步块内的语句是不会被执行的。 方法内的同步语句块会使用monitorenter和monitorexit这两个操作码来实现同步。 操作码 操作数 描述 monitorenter 无 弹出objectref,获得和objectref相关联的锁 monitorexit 无 弹出objectref,释放和objectref相关联的锁 当虚拟机遇到monitorenter时,它获得栈中objectref所引用对象的锁,如果线程已经拥有了该对象的锁,锁的计数器就加1,线程中每个monitorexit指令会引起计数器减1.当计数器变为0时,监视就释放了。 调用同步方法或者从同步方法返回虚拟机并没有使用任何特别的操作码,当虚拟机解析到方法的符号引用时,它判断这个方法是否是同步的,如果是同步,虚拟机就在调用方法之前获取一个锁,对于实例方法来说,虚拟机在方法要被调用时获取对象的关联的锁,对于类方法,它获取方法所属类的锁(其实是Class对象上锁),当同步方法执行完毕,无论正常还是产生异常,虚拟机都会释放该锁。” ============ synchronized void rever() { ... } 同步块会生成显式的monitorenter和monitorexit指令,并且会创建相应的异常表,用于在执行代码产生异常时释放锁。 比较而言,同步方法则不会生成显式的monitorenter和monitorexit指令。因此比上面的代码更加高效,因为没有进入和离开监视器的代码。
回应 2013-11-25 17:20:50 -
仰望ぜ晴天 (道德是什么,能吃吗?)
任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗...2012-09-04 16:31:28 1人喜欢
任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗认为是垃圾,因为他们不在影响程序的未来执行。 垃圾收集算法: 1、引用计数收集器(无法检测出循环,并且计数带来开销) 2、跟踪手机器 3、压缩收集器 4、拷贝收集器 5、按代收集的收集器 6、自适应收集器 7、火车算法 引自 垃圾收集 回应 2012-09-04 16:31:28 -
仰望ぜ晴天 (道德是什么,能吃吗?)
在java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。但开始于main()的是非守护线程。 当程序中所有的非守护线程都终止时,虚拟机实例将自动退出。程序本身也能够通过调用runtime类或者system类的exit()方法来退出。2012-09-04 15:51:56 1人喜欢
-
1.为什么需要网络移动性 个人计算机的快速发展,解决了多人共用同一台主机cpu时间的问题--->个人电脑孤岛模式(没有大型主机多用户共享数据的优势),随着网络普及--->出现了客户端/服务器模式--->发展为分布式处理模式。分布式处理模式综合了网络和处理器发展的优点,将进程放在多个处理器上执行,并运行进程间共享数据。但是分布式处理也带来了管理上的困难,与大型主机相比,多个终端上的版本控制问题也带来了挑战...
2011-07-12 15:56:10 2人喜欢
1.为什么需要网络移动性 个人计算机的快速发展,解决了多人共用同一台主机cpu时间的问题--->个人电脑孤岛模式(没有大型主机多用户共享数据的优势),随着网络普及--->出现了客户端/服务器模式--->发展为分布式处理模式。分布式处理模式综合了网络和处理器发展的优点,将进程放在多个处理器上执行,并运行进程间共享数据。但是分布式处理也带来了管理上的困难,与大型主机相比,多个终端上的版本控制问题也带来了挑战。--->java的出现带来了一种新的模式,使软件和数据同时传输成为可能,这样使软件升级维护变得简单。 2.一种新的模式 处理器性能提高和价格下降--->个人电脑代替大型计算机 网络速度提高和流量价格下降-->软件模式向具有网络移动性的分布式方向发展。 最初,网络只能展示蚊子--->带宽增加,可以承载图片,网络实现了报纸和杂志的功能--->带宽增加,可以承载音频数据流,网络实现了收音机、电话功能--->可以承载视频数据量,网络实现电视功能---->理论上有足够的带宽,处理器就可以将代码发送到另一个处理器上执行,从整体来看,整个网络就是一台大型计算机。 在一定程度上改变软件模式,不是彻底。可以使软件发布,更新变得容易。 3.Java提醒结构对移动性的支持 平台无关性---可以在所有机器上执行 安全性---放心的下载 除此之外,java体系结构对移动性的支持主要体现在对传输时间的管理上: 1.java的class文件设计得很紧凑(每条指令只占一个字节,有例外) 2. class是动态扩展和执行的,不必等到所有class下载完毕才开始执行。 3.动态链接和动态扩展 4.对jar文件的支持,可以一次传输多个文件 4.applet 5.JINI服务对象:网络移动对象的示例 对象的网络移动性。 由RMI和对象序列化技术作为基础。 使得一个虚拟机上的对象可以引用另外一个虚拟机上的对象,调用那些远程对象的方法,打破虚拟机之间的界限,简化分布式程序的开发和部署。 JINI提供一个运行时基础结构,核心是查找服务。具体工作模式是,服务提供者第一进入网络后,执行“探索”服务,具体就是向一个公开的端口发送组播包(包含自己的IP和端口),方便查找服务和自己联系。 查找服务监听公开端口,发现有新的服务后,如果确定和服务提供者联系,通过接收到的IP和端口建立TCP连接,向服务提供者发送一个服务注册器对象(使用RMI技术)。 服务提供者通过服务注册器对象注册自己的服务。查找服务负责保存所有的服务目录。 客户机使用lookup查找服务,传递想要得到的服务模板,如果找到合适的服务,即可调用。 JINI体系的一个重要推论就是:1.在服务对象代理和远程服务对象之间采用的通讯协议客户是完全没有必要关心的。 2.提升了分布式系统编程的级别,由网络协议级别提升到了对象接口级别。 3.接口和实现的分离的好处。
回应 2011-07-12 15:56:10
-
仰望ぜ晴天 (道德是什么,能吃吗?)
JAVA体系结构包括四个独立但相关的技术: JAVA程序设计语言 JAVA class文件格式 JAVA应用编程接口(API) JAVA虚拟机 JAVA虚拟机和JAVA API 的组合除了 被称为JAVA运行时系统之外,还被称为JAVA平台。 JAVA虚拟机的主要任务是装载class文件并且执行其中的字节码。2012-09-04 14:33:31
-
(1)jvm主要作用--interpreter of bytecode --转载class文件 class loader --执行其中的字节码 执行引擎 (2)执行引擎分类: --一次性解释字节码 --JIT 即时编译 --AOT interpreter when install (3)流程 *.java 被javac编译成*.class的字节码 装载java的API的class 执行引擎解释为二进制机器码
2011-04-11 13:35:07
-
1.3.1 Java虚拟机 不同的Java虚拟机中,执行引擎可能实现的非常不同。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另一种执行引擎更快,但是也更消耗内存,叫做“即时编译器”(Just-in-time compiler)。在这种情况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字...
2022-03-05 13:08:27
1.3.1 Java虚拟机 不同的Java虚拟机中,执行引擎可能实现的非常不同。在由软件实现的虚拟机中,最简单的执行引擎就是一次性解释字节码。另一种执行引擎更快,但是也更消耗内存,叫做“即时编译器”(Just-in-time compiler)。在这种情况下,第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地代码,其他的代码由于使用得并不频繁,继续保留为字节码——由虚拟机继续解释它们。一个自适应的优化器可以使得Java虚拟机在80%~90%的时间里执行被优化过的本地代码,而只需要编译10%~20%对性能有影响的代码。最后一种虚拟机由硬件芯片构成,它用本地方法执行Java字节码,这种执行引擎实际上内嵌在芯片里的。 引自 第1章 Java体系结构介绍 Java虚拟机执行引擎的几种方式。
回应 2022-03-05 13:08:27 -
java语言提供了两种内置方式来标志监视区域:同步语句及同步方法。这两个机制实现了同步的互斥,是被java虚拟机的指令集支持的。 同步语句: void rever() { synchronized(this) { ... } } “ 在上面的例子中,如果没有获得对当前对象(this)的锁,同步块内的语句是不会被执行的。 方法内的同步语句块会使用monitorenter和monitorexit这两个操作码来实现同步。 操作码 操作数 描述 monitorent...
2013-11-25 17:20:50 3人喜欢
java语言提供了两种内置方式来标志监视区域:同步语句及同步方法。这两个机制实现了同步的互斥,是被java虚拟机的指令集支持的。 同步语句: void rever() { synchronized(this) { ... } } “ 在上面的例子中,如果没有获得对当前对象(this)的锁,同步块内的语句是不会被执行的。 方法内的同步语句块会使用monitorenter和monitorexit这两个操作码来实现同步。 操作码 操作数 描述 monitorenter 无 弹出objectref,获得和objectref相关联的锁 monitorexit 无 弹出objectref,释放和objectref相关联的锁 当虚拟机遇到monitorenter时,它获得栈中objectref所引用对象的锁,如果线程已经拥有了该对象的锁,锁的计数器就加1,线程中每个monitorexit指令会引起计数器减1.当计数器变为0时,监视就释放了。 调用同步方法或者从同步方法返回虚拟机并没有使用任何特别的操作码,当虚拟机解析到方法的符号引用时,它判断这个方法是否是同步的,如果是同步,虚拟机就在调用方法之前获取一个锁,对于实例方法来说,虚拟机在方法要被调用时获取对象的关联的锁,对于类方法,它获取方法所属类的锁(其实是Class对象上锁),当同步方法执行完毕,无论正常还是产生异常,虚拟机都会释放该锁。” ============ synchronized void rever() { ... } 同步块会生成显式的monitorenter和monitorexit指令,并且会创建相应的异常表,用于在执行代码产生异常时释放锁。 比较而言,同步方法则不会生成显式的monitorenter和monitorexit指令。因此比上面的代码更加高效,因为没有进入和离开监视器的代码。
回应 2013-11-25 17:20:50 -
仰望ぜ晴天 (道德是什么,能吃吗?)
任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗...2012-09-04 16:31:28 1人喜欢
任何垃圾收集算法都必须做两件事情。首先,他必须检测出垃圾对象。其次,它必须回收垃圾对象所使用的堆空间并还给程序。 垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序了来说,根对象总是可以访问的。从这些根对象开始,任何可以被触及的对象都被认为是“活动”的对象。无法被触及的对象呗认为是垃圾,因为他们不在影响程序的未来执行。 垃圾收集算法: 1、引用计数收集器(无法检测出循环,并且计数带来开销) 2、跟踪手机器 3、压缩收集器 4、拷贝收集器 5、按代收集的收集器 6、自适应收集器 7、火车算法 引自 垃圾收集 回应 2012-09-04 16:31:28
论坛 · · · · · ·
现在(2019年)来看这本书的内容过时了吗? | 来自w | 2 回应 | 2020-08-19 09:00:34 |
有此书转让的说一下哈 | 来自钢铁暴牙猪 | 4 回应 | 2019-04-15 17:56:15 |
有转让的么 三倍价钱收 天津本地的更好 | 来自无为 | 2013-06-19 11:41:30 | |
基本就是翻译JVM规范 | 来自pandonix | 2010-07-09 23:41:26 | |
没有学过java,感觉这本书真的还不错,通俗易懂。 | 来自keni | 2009-07-06 12:39:35 |
> 浏览更多话题
这本书的其他版本 · · · · · · ( 全部2 )
-
McGraw-Hill Companies (2000)9.0分 16人读过
在哪儿借这本书 · · · · · ·
以下书单推荐 · · · · · · ( 全部 )
谁读这本书?
二手市场
订阅关于深入Java虚拟机(原书第2版)的评论:
feed: rss 2.0
0 有用 阿丹 2007-06-17 19:49:23
读过两遍的书,准备再读一遍
0 有用 思寇特牌搬砖工 2011-01-25 09:11:17
经典之作,太老减一颗星,翻译减一颗星 2011读的第一本技术书
1 有用 IUSR 2006-05-07 17:58:09
没看过这个当然可以照样用Java编程,看过才知道为什么要怎么编。
0 有用 Andy 2009-05-18 13:31:11
机器是怎么实现的?
0 有用 tyskin汩余不及 2015-08-02 23:34:50
jvm指令集手册
0 有用 曹操不吃饭 2020-08-14 02:37:21
我特么现在全忘了,但是大二上半年捧着书看的日子好怀念
0 有用 玉玺 2020-08-13 00:01:52
书本虽然比较老旧,但是对于虚拟机的知识讲的非常透彻,推荐
0 有用 茶水杯 2020-06-02 16:42:34
第一次读不觉得什么,再次读发现作者好厉害啊,复杂的问题,从头到尾娓娓道来,一气呵成。国内的书比如周志明老师写的,总感觉讲的断断不连续,一块知识一块知识往外吐,看不出他本来的面貌。这本书有个缺点就是太老了,后面很多章节基本不用看,比如垃圾回收,还有前面一些applet
0 有用 GLGGAG 2020-04-11 15:59:11
Jvm领域的权威教材
0 有用 w 2020-03-23 14:59:45
看完《计算机系统要素》再回来看虚拟机,再看看Java中用来实现同步的监视器,加深理解