`
IcyFenix
  • 浏览: 362833 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

《深入理解Java虚拟机:JVM高级特性与最佳实践》勘误

 
阅读更多
《深入理解Java虚拟机:JVM高级特性与最佳实践》出版后收到不少读者的来信,热心地指出一些书中存在的缺陷,列出勘误如下:

前言的前面一页,第二段第7行,“虚拟机字节码的执行引擎以及它在实行代码时涉及的内存结构”,应为“执行”

前言第IX页 正确的勘误地址是icyfenix.iteye.com/blog/1095132,编辑把i漏掉了,囧

P51 但是-XX:+TraceClassLoading参数需要fastdebug版的虚拟机支持。应该是-XX:+TraceClassUnLoading

P58 脚注处,“基于集中收集器则共用了部分的框架代码”,错别字,应该为“几种”

P156 表6-14,有两处attribute_lenght为错别字,应为attribute_length,并且第二行第一列,类型u2不对,应为u4。

P183 倒数第4行,“确认C是否有对D的访问权限”,应为“确认D是否有对C的访问权限”

P247 最后一行“会把其他进程向标准输出中打印的……”,应为线程。

P336 第一段“线程的创建、切换和调度都是需要考虑问题”, 少了一个“的”

P346 “因为如果另一个线程恰好在错误的时间里删除了一个元素,导致序号i已经不再可用的话,get()方法就会抛出一个ArrayIndexOutOfBoundsException”,这个异常不限于get()方法,日志中演示的就是remove()方法,所有使用到那个已删除元素的方法都会出现异常。因此下一版中这句话会改为“因为如果另一个线程恰好在错误的时间里删除了一个元素,导致序号i已经不再可用的话,再用i访问数组就会抛出一个ArrayIndexOutOfBoundsException”

P62 “也就是当CPU在4个以上时,并发回收时垃圾收集线程最多占用不超过25%的CPU资源",这个推论有问题,正确的应该是“也就是当CPU在4个以上时,并发回收时垃圾收集线程不少于25%的CPU资源,并且随着CPU数量的增加而下降”

P213 “这时发生了两次自动类型转换,‘a’转型为整数65之后,进一步转型为长整数65L”,此处应为97, 65为'A'的十进制数字。上一次更新疏忽了,改了这页前面一句,还剩下这一句没有修改。


=========== 以下为已在第5次重印(2012.4.11)修正的错误 ===========


P64 “能让使用者明确指定在一个长度为M毫秒的时间片段内”,错别字,应为“即”。

P93 代码清单4-7中最后3行排版有问题,漏掉了第一个字母:
    br.readLine();
    Object obj = new Object();
    createLockThread(obj);

P213:'a'除了可以代表一个字符串外,还可以代表数字65(字符'a'的Unicode数值为十进制数字65),此处应为代表数字97, 65为'A'的十进制数字。

P225 倒数第三行“执行偏移地址为1的指令,istore_1指令……”,1是错误的,对应图8-6,应为“执行偏移地址为2的指令,”

P249 代码清单9-4
// 常量池中11种常量所占的长度
private static final int[] CONSTATN_ITEM_LENGTH = {-1, -1, 5, -1, 5, 9, 9, 3, 3, 5, 5, 5, 5};
正确的应为:
private static final int[] CONSTATN_ITEM_LENGTH = {-1, -1, -1, 5, 5, 9, 9, 3, 3, 5, 5, 5, 5};

P322 “执行sotre和write”,错别字,应为store。

=========== 以下为已在第4次重印(2011.12.6)修正的错误 ===========


P41 “程序使用了GCLib字节码增强”,错别字,应为“CGLIB”

P17 脚注:“JDK Plug已经不在需要了”,错别字,应为“不再”

P25 “它的作用可以看做是”,错别字,应为“看作”

P26 程序计数器的英文拼错,“Program Couter Register”,Counter少了个n,还有图中阴影部分,由所有线程共享的数据区应该包含“方法区”,“堆”。此问题只在第3、4次重印的图片中有,第1、2次印版的图是正确的,应是编辑重做图片时搞错了。

P123 “笔者测试了自己机器上的Tomcat和ClassFish启动过程”,错别字,应为GlassFish。

P128 “设置为-Xmx和-XX:PermSizeMax参数值一样”,错别字,应为MaxPermSize

P156 表6-14 2处“attribute_lenght”为错别字,应为attribute_length

P183 “由于数据验证、字节码验证的需要”,错别字,应为“元数据验证”

P233-P234,“SharedClasLoader”为错别字,漏了一个s,应为“SharedClassLoader”,其中233页2处,234页1处

P235 最后一行“GlassFlish服务”,错别字,应为GlassFish。

P326 “java.util.concurrentb包”,“concurrent”后面多了一个“b”。

P328 “如果有多个进程共享一个并未声明为volatile的long或double类型的变量”,应为线程。

P333 “代码清单12-8的两条复制语句在同一个线程之中”,错别字,应为赋值语句。

P335 “所以各种进程操作,如创建、析构及同步”,应为线程。

P339 “12.4.3 状态转换”中,多处“线程”误写为“进程”,分别为:“Java语言定义了5种进程状态”……“一个进程只能有且只有其中的一种状态”……“处于这种状态的进程不会被分配CPU执行时间”……“处于这种状态的进程也不会被分配CPU执行时间”……“进程被阻塞了”。

P340 “限期等待(Timed Waitting)”,错别字,应为Waiting

=========== 以下为已在第3次重印(2011.9.29)修正的错误 ===========

P26 “每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息”,Operand译作“操作数”,本书其他地方也使用“操作数栈”的译法,这里笔误漏掉了红色的“数”字。另,也有译作“求值栈”,但本书未采用。

P26 “如果正在执行的是Natvie方法”,错别字,应为“Native”

P58 “不幸的是,它作为老年代的收集器”,有读者指出这里代词“它”似乎有歧义,可能会理解为它是“ParNew”,重印时将修改为“不幸的是,CMS作为老年代的收集器”。

#读者反馈仍未修正,请编辑下一版注意# P74 “以MaxTenuringThreshold = true参数来运行的结果”,应为“以HandlePromotionFailure = true参数来运行的结果”

P128 “从Old Gen曲线上看,永久代直接固定在384M”,这里有个笔误,应该是“老年代”。

P148 “access_flags中一共有32个标志位可以使用,当前只定义了其中8个”,32个是错误的,只有16个标志位可以用,因为access_flags的长度是u2。

P149 “是类级变量还是实例级变量(static修饰符)”,原本括号是注释整段话的,有朋友误解为注释“实例级变量”,那就把顺序换过来吧,改为“是实例变量还是类变量(static修饰符)”

P154 注释1中“<init>和<cinit>的详细内容见本书的第10章”。“<cinit>”应为“<clinit>”

P173 “对类进行发射调用的时候”,“发射”是错别字,应为“反射”。

P210 代码8-6倒数第5行的“StaticResolution sr = new StaticResolution();”,应为“StaticDispatch sd = new StaticDispatch();”

P354 代码清单13-5,代码说明中写的方法名字是incrementAndGet(),而代码中所使用的则是getAndIncrement()。这2个方法是原子类用于对应 “++i”和“i++”操作的。原本用哪个来演示都没问题,但是说明与代码不统一的确笔者疏忽所致。在下次重印时间将把代码修正为:
    /**
     * Atomically increment by one the current value.
     * @return the updated value
     */
    public final int incrementAndGet() {
        for (;;) {
            int current = get();
            int next = current + 1;
            if (compareAndSet(current, next))
                return next;
        }
    }

P366 字节码指令表中,bipush和sipush的数值范围应为(-128~127)和(-32768~32767),原文编辑时把负号漏掉了。


=========== 以下为已在第1次重印(2011.7.22)时修正的错误 ===========

P6:“并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器(JDK 1.1也可以使用外挂方式的JIT编译器)”,这句话括号里面的内容有歧义,在重印的时候将修改为“并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器(JDK 1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平台出现过;后面2个虚拟机都是内置JIT编译器的,而之前版本所带的Classic VM只能以外挂的形式使用JIT编译器)”

#读者反馈仍未修正,请编辑下一版注意# P9:脚注中“Hot Roekit”,应为“HotRockit”

P37:代码清单2-3的代码和2-2的代码完全一样,这是由于我工作疏忽而导致的粘贴错误,正确的代码2-3应为:
/**
 * VM Args:-Xss2M 
 * @author zzm
 */
public class JavaVMStackOOM {
 
       private void dontStop() {
              while (true) {
              }
       }
 
       public void stackLeakByThread() {
              while (true) {
                     Thread thread = new Thread(new Runnable() {
                            @Override
                            public void run() {
                                   dontStop();
                            }
                     });
                     thread.start();
              }
       }
 
       public static void main(String[] args) throws Throwable {
              JavaVMStackOOM oom = new JavaVMStackOOM();
              oom.stackLeakByThread();
       }
}

P51:“还可以使用-verbose:class以及-XX:+TraceClassLoading、-XX:+TraceClassUnLoading查看类加载和卸载信息。”,这句话没有错误,但是重印的时候需要在后面补充说明一下:“-verbose:class和-XX:+TraceClassLoading可以在product版的虚拟机中使用,但是-XX:+TraceClassUnLoading参数需要fastdebug版的虚拟机支持。”

P82:“-XX:HeapDumpOnOutOfMemoryError参数、-XX:HeapDumpOnCtrlBreak参数”这2个参数都是开关参数,这里缺少加号。正确应为“-XX:+HeapDumpOnOutOfMemoryError参数、-XX:+HeapDumpOnCtrlBreak参数”

P141:表6-2,关于JDK 1.7中Javac的target默认参数,以前曾经是target 6,但很早(2009年8月左右)就修改回target 7了,所以表格倒数第三行的内容已经过时。重印时表格修改为下面这样:


P187:“<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序一定是先变量赋值再静态语句块(无论在源文件中出现的顺序如何),因此在静态语句块中可以访问到变量的初始值了”。这句话是错误的,在重印时将修改为:“<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。”

P364:倒数第4行的“Androd”应为“Android”。

(本帖我会随时保持更新,发现错误的同学,欢迎通过站内短信、Email等方式与我联系,本帖作为勘误公布,如有讨论,请移步至讨论帖
  • 大小: 6.7 KB
分享到:
评论
4 楼 IcyFenix 2011-07-08  
bugu1986 写道
我指的是当当,不知道作者您指的是哪家。


在这里可以买了,比当当还稍微便宜一些,感谢支持。http://product.china-pub.com/194035
3 楼 bugu1986 2011-07-08  
bugu1986 写道
可是书还是预售中啊。。辛亏出差在外。。否则怎一个望眼欲穿了得啊。


我指的是当当,不知道作者您指的是哪家。
2 楼 IcyFenix 2011-07-08  
在china-pub可以买了。当当网不知道咋回事,一个星期了还在预售。
话说这个帖子要锁定掉才行,保持严肃,嗯嗯
1 楼 bugu1986 2011-07-08  
可是书还是预售中啊。。辛亏出差在外。。否则怎一个望眼欲穿了得啊。
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Python项目-自动办公-59 PPT_pptx_在PPT中写入图片和表格.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    Python项目-实例-20 快递查询.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    杂货产品检测43-YOLO(v5至v9)、CreateML、Paligemma、TFRecord、VOC数据集合集.rar

    杂货产品检测43-YOLO(v5至v9)、CreateML、Paligemma、TFRecord、VOC数据集合集.rarIPCV分配-V6 2024-01-21 6:10 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括7012张图像。 家庭废物以createMl格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 没有应用图像增强技术。

    绝对给力的源码,在线音乐播放器完整项目.zip

    Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    毕业设计-0-1背包问题动态规划模型Python代码.rar

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。

    保质量的周期边界2dAllen-Cahn方程求解器:纯隐格式迭代解

    谁喜欢谁下载,没啥商业价值,comsol也能做,不过我这产量更大

    Python项目-游戏源码-10 植物大战僵尸.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    实现获取视频的缩略图(ThumbnailUtils),并且播放.zip

    Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    推箱子Python小游戏

    推箱子Python小游戏

    基于ssm的新媒体视域下的中国古诗词展演源代码(java+vue+mysql+说明文档+LW).zip

    该新媒体视域下的中国古诗词展演主要为管理员和用户两类用户角色提供需求,管理员在后台可以对系统进行全面管理,用户在前台可以进行查看系统信息,注册登录,查询校园失物,评论,下载校园失物等操作。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7

    Matlab实现PSO-BiLSTM-Attention粒子群算法优化双向长短期记忆神经网络融合注意力机制多特征分类预测(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了使用MATLAB实现PSO-BiLSTM-Attention粒子群优化双向长短期记忆神经网络融合注意力机制的多特征分类预测模型。通过PSO优化BiLSTM模型的超参数、引入注意力机制增强模型的特征提取能力,提升了多维度数据的分类精度。模型在金融风险预测、医疗健康预测、交通流量预测等多个领域具有广泛的应用前景。项目详细描述了模型架构、代码实现、训练与优化、模型评估与可视化、以及GUI界面设计等方面的内容。 适合人群:具备一定编程基础,工作1-3年的数据科学家和机器学习工程师。 使用场景及目标:① 金融、医疗、交通等领域的多特征分类预测任务;② 结合PSO优化BiLSTM超参数、引入注意力机制,提升模型预测准确度。 阅读建议:本文详细讲解了模型的理论背景、算法实现和应用案例,适合希望深入理解深度学习和优化算法的读者。建议结合代码和实际数据进行实验,以便更好地掌握模型的设计和优化过程。

    Java项目-基于SSM的物资管理系统项目源码.zip

    Java项目-基于SSM的物资管理系统项目源码

    Video_2024-12-18_000023.wmv

    Video_2024-12-18_000023.wmv

    Python项目-自动办公-26 Python从原Excel表中抽出数据存入同一文件的新的Sheet.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    基于ssm的家居商城系统的设计与实现+jsp源代码(完整前后端+mysql+说明文档+LW).zip

    系统实现: 用户功能模块:用户点击进入到系统操作界面,可以对主页、个人中心、我的收藏管理、订单管理等功能模块,我的收藏管理:通过列表可以获取用户ID、收藏ID、表名、收藏名称、收藏图片信息并进行修改操作 管理员功能模块:管理员通过用户名和密码填写完成后进行登录。管理员登录成功后进入到系统操作界面,可以对主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等功能模块进行相对应操作。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

    STM32F103单片机采集温湿度及SPI FLASH数据保存并通过BC260-NBIOT模块上传数据到华为云物联网平台代码

    1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。

    基于ssm的学习视频资源库的系统源代码(java+jsp+mysql+说明文档).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7

    Java项目-基于SSM的网上淘书吧.zip

    Java项目-基于SSM的网上淘书吧

    Oracle 19c 中的闪回技术详解及实战

    内容概要:本文详细介绍了 Oracle 19c 中的闪回技术,包括闪回查询、闪回事务查询、闪回丢弃、闪回表、闪回数据库和闪回归档。具体讲解了每种闪回技术的原理、配置方法、操作步骤和限制条件,并提供了具体的实例和 SQL 命令。目的是帮助数据库管理员和开发人员理解和掌握如何利用这些技术来提高数据恢复和错误修复的能力,减少数据库管理的复杂性和风险。 适合人群:Oracle 数据库管理员、数据库开发人员及维护人员。 使用场景及目标:① 使用闪回技术快速恢复因误操作或其他错误导致的数据丢失;② 配置闪回技术以实现高效的数据库恢复;③ 在日常运维中监控和管理闪回操作。 其他说明:本文不仅提供了理论上的解释,还包含了实际操作的示例,以便读者能够更好地理解和应用这些技术。

Global site tag (gtag.js) - Google Analytics