• 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
  • 【现货速发】深入理解JVM字节码
21年品牌 40万+商家 超1.5亿件商品

【现货速发】深入理解JVM字节码

全新正版书籍,24小时发货,可开发票。

47.2 5.3折 89 全新

库存5件

天津津南
认证卖家担保交易快速发货售后保障

作者张亚

出版社机械工业出版社

ISBN9787111653721

出版时间2020-05

装帧平装

开本16开

定价89元

货号28552589

上书时间2024-12-23

易安居书舍

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
前言

大约四五年前,秉承“代码未动、监控先行”的理念,我开始在公司的平台部门做服务质量监控平台。开始是使用人工埋点的方式来进行监控信息的上报,业务方的接入成本非常高,上线前需要花半天到一天的时间来进行埋点,苦不堪言。

后来公司大力推行 ,提高了开发和运维效率,但分布式部署架构带来的问题也迅速显现出来,如服务拓扑不清、服务依赖关系复杂、日志散落在各个微服务中,等等。在出现问题时,开发人员不知道如何排查,无法快速定位问题。后来我了解到 javaagent ASM 这样的技术能够自动注入埋点的代码,于是花了大概一个月的时间苦学字节码、ASM 相关的知识。ASM官方的英文手册读了不下 5 遍,深知其中的难点。另外,APM 这一套性能监控工具需要极高的可靠性和极低的性能损耗,倒逼着我对字节码的执行原理、高性能 Java等有了更深入的研究。

我花了大概 3 个月的时间从零到一实现了整套无侵入字节码注入 APM 系统,对整个后端微服务调用栈进行监控,实现了业务方零埋点、跨进程异构系统的调用链路追踪、性能问题代码级别定位、业务拓扑实时发现、SLA 实时统计等功能。该系统上线运行了几年,至今未出现问题。

我平时喜欢破解一些软件,一开始都是通过直接修改类文件的方式来进行的,比较烦琐。掌握了 javaagent、ASM、JVMTI 这些工具以后,对软件破解有了更深入的研究。

后来从平台部门去业务部门带领更大的团队,很早期的时候就引入了  来进行后端开发。为了避免基础较差的同事误解语法糖的意思,我对 Kotlin 中很多语法背后的实现做了详细的分析,让他们在使用的时候更加清楚语法糖的实现原理。

一路走来,觉得越底层的知识越有价值,所以想写一本这样的书,让更多的人能够对 JVM 字节码底层的细节多一些了解,在遇到问题时能自己分析、独立判断。

 

希望你可以通过阅读本书知其然并知其所以然,理解炫酷语法和高级框架背后的实现原理,实现各种 JVM“黑科技”,真正搞懂反射、Lambda 表达式、AOP、热加载、软件破解等的实现细节。

 

对 Java 有初步了解,想深入学习其内部运行细节的读者;

通过学习字节码改写技术实现高性能框架的读者;

对 APM 感兴趣,想了解 APM 实现原理的读者,以及准备搭建 APM 系统用来做分布式系统调用链跟踪的读者;

想学习 Java 软件常见的破解和防破解方法,提高软件逆向和破解水平的读者。

 

本书一共 12 章,从逻辑上主要分为和两大部分。

  • 第 1 章详细剖析了 class 文件的内部结构,帮助读者理解本书后面介绍的字节码原理。
  • 第 2 章首先介绍了什么是字节码,接下来介绍了 Java 虚拟机栈和栈帧的相关内容,然后通过 for 循环、switch-case、try-catch-finally 等语法讲解了字节码指令的用法。
  • 第 3 章介绍了字节码的进阶知识,主要目的是让读者掌握方法调用指令、泛型擦除、synchronized 关键字、反射的底层实现原理。
  • 第 4 章介绍了javac 编译器的原理。编译原理是计算机科学皇冠上的明珠,只有弄懂了 javac 才能更好地理解字节码的生成原理。本章一开始介绍了 javac 源码的调试方法,随后详细介绍了 javac 编译的七大阶段和各阶段的作用。
  • 第 5 章从字节码角度看 Kotlin 语言,介绍了常见语法糖和协程等的原理,希望读者在学习其他 JVM 系语言时可以举一反三,使用类似的思路。
  • 第 6 章介绍了 ASM 和 Javassist 两个字节码操作工具。这两个工具非常重要,被广泛用于中间件框架中,后面关于APM、软件破解的章节都涉及这两个工具的使用。
  • 第 7 章介绍了 Java Instrumentation 的原理,分两种方式讲解了如何使用 Instrumentation,后介绍了 Attach API 的底层 UNIX 域套接字的通信原理。
  • 第 8 章介绍了 JSR 269 插件化注解处理的原理,希望读者可以通过本章掌握编译期间生成、修改代码的方法,理解 Lombok、ButterKnife 工具的实现原理。
  • 第 9 章主要介绍了字节码在 cglib、Fastjson、Dubbo、JaCoCo、Mock 这些框架上的应用,可以让读者接触到更多字节码的使用场景。
  • 第 10 章主要介绍了反编译、破解、防破解和逆向工程的相关内容。了解常见的破解和逆向方法能更好地保护自己的软件产品。
  • 第 11 章介绍了 APM 的概况、分布式跟踪的基本原理、OpenTracing 的基本概念和无埋点字节码插桩的代码实现。如果对 APM 有兴趣,可以将本章作为入门指导,实现自己的 APM 产品。
  • 第 12 章详细介绍了Android dex 文件的组成结构,以及Android字节码指令与 Java 字节码指令的区别,后介绍了 Gradle 字节码改写实现无侵入插桩的方法。


导语摘要

这是一本揭示JVM字节码“黑科技”的著作,它从原理和应用两个维度深入剖析了JVM字节码。书中内容涉及JVM字节码的大部分应用场景,如Java性能优化、软件防护与破解、APM等,通过大量实战案例讲解了它在这些场景中的实操技巧。

本书共 12 章,从逻辑上分为两大部分。


第1章详细剖析了class文件的内部结构;

第2章介绍了字节码的概念以及Java虚拟机栈和栈帧的相关内容;

第3章介绍了字节码的进阶知识,包括泛型擦除、synchronized关键字、反射的底层实现原理;

第4章介绍了javac编译器的原理,以及javac编译的七大阶段和各阶段的作用;

第5章从字节码的角度介绍Kotlin的常见语法糖、coroutine等原理;

第6章介绍了ASM和Javassist这两个字节码操作工具;

第7章介绍了Java Instrumentation的原理;

第8章介绍了JSR 269插件化注解处理原理。


第9章介绍了字节码在cglib、Fastjson等框架上的应用;

第10章介绍了反编译、破解、防破解和逆向工程的相关内容;

第11章介绍了APM的概况、分布式跟踪的基本原理等;

第12章详细介绍了Android dex文件的组成结构,以及Android字节码指令与Java字节码指令的区别。



作者简介


资深后端工程师和Java工程师,CVTE(视源股份,股票代码:002841)高级技术经理,带领20多人的研发团队做教育相关的产品。


主要方向是 JVM 调优及故障诊断、TCP 源码剖析、高并发系统设计,致力于后端底层技术细节的研究。独立实现了公司级全链路APM 产品,在字节码、ASM、软件破解等方向有丰富的实战经验。


 vim 狂热爱好者,热衷分享,是掘金平台的优秀作者,在掘金上撰写过两本关于JVM和TCP 底层原理的小册子。



目录



1.1 初探 class 文件  1


1.2 class 文件结构剖析  3


1.2.1 魔数  4


1.2.2 版本号  6


1.2.3 常量池  7


1.2.4 Access flags  18


1.2.5 this_class、super_name、interfaces  19


1.2.6 字段表  20


1.2.7 方法表  23


1.2.8 属性表  25


1.3 使用 javap 查看类文件  30


1.4 小结  32


 





2.1字节码概述  33


2.2 Java 虚拟机栈和栈帧  34


2.3 字节码指令  41


2.3.1 加载和存储指令  41


2.3.2 操作数栈指令  42


2.3.3 运算和类型转换指令  45


2.3.4 控制转移指令  46


2.3.5 for语句的字节码原理  48


2.3.6 switch-case底层实现原理  54


2.3.7 String的switch-case实现的字节码原理  55


2.3.8  i和i 的字节码原理  60


2.3.9 try-catch-finally的字节码原理  63


2.3.10 try-with-resources 的字节码原理  71


2.3.11 对象相关的字节码指令  74


2.4 小结  77


 





3.1 方法调用指令  78


3.1.1 invokestatic指令  79


3.1.2 invokevirtual指令  79


3.1.3 invokespecial指令  80


3.1.4 invokeinterface指令  80


3.1.5 invokedynamic指令  90


3.2 Lambda 表达式的原理  95


3.3 泛型与字节码  100


3.4 synchronized 的实现原理  102


3.5 反射的实现原理  106


3.5.1 反射方法源码分析  107


3.5.2 反射的inflation机制  109


3.6 小结  110


 





4.1 javac 源码调试  112


4.2 javac 的七个阶段  114


4.2.1 parse阶段  115


4.2.2 enter阶段  116


4.2.3 process阶段  118


4.2.4 attr阶段  118


4.2.5 flow阶段  121


4.2.6 desugar阶段  122


4.2.7 generate阶段  126


4.3 小结  129


 





5.1 Metadata 注解  130


5.2 顶层方法  132


5.3 object 单例  133


5.4 扩展方法  134


5.5 接口默认方法  135


5.6 默认参数  137


5.7 高级 for 循环  140


5.8 data class  142


5.9 多返回值  143


5.10 协程的实现原理  144


5.10.1 CPS 介绍  145


5.10.2 suspend 关键字  146


5.11 从字节码分析 Kotlin 编译器的bug  149


5.12 小结  153


 





6.1 ASM 介绍  154


6.1.1 ASM Core API核心类  156


6.1.2 ASM操作字节码示例  158


6.2 Javassist 介绍  169


6.2.1 Javassist核心API  169


6.2.2 Javassist操作字节码示例  170


6.3 小结  174


 





7.1 Java Instrumentation 简介  175


7.2 Instrumentation 与 -javaagent启动参数  176


7.3 JVM Attach API 介绍  180


7.3.1 JVM Attach API基本使用  181


7.3.2 JVM Attach API的底层原理  183


7.4 小结  190


 





8.1 JSR 269 简介  191


8.2 抽象语法树操作 API  193


8.2.1 Names介绍  193


8.2.2 JCTree介绍  193


8.2.3 TreeMaker介绍  198


8.2.4 自定义注解处理实战  202


8.3 JSR 269 在常用框架上的应用  207


8.3.1 案例一:ButterKnife  207


8.3.2 案例二:Lombok  209


8.4 小结  212


 





9.1 cglib 动态代理原理分析  213


9.1.1 cglib核心API介绍  214


9.1.2 cglib原理分析  216


9.2字节码在 Fastjson 上的应用  218


9.3 字节码在 Dubbo 上的应用  221


9.4 字节码在 JaCoCo 代码覆盖率上的应用  222


9.5 字节码在 Mock 上的应用  225


9.6 小结  227


 





10.1 反编译  228


10.2 软件破解  229


10.2.1 破解方式一:直接修改class文件  230


10.2.2 破解方式二:javaagent无痛破解  232


10.3 软件防破解  234


10.3.1 自定义ClassLoader  234


10.3.2 JNI隐藏核心逻辑  237


10.3.3 基于JVMTI的加密方案  239


10.3.4 混淆  245


10.4 小结  250


 





11.1 全链路分布式跟踪介绍  251


11.1.1 什么是全链路分布式跟踪  252


11.1.2 OpenTracing基本术语  253


11.1.3 分布式跟踪的实现和上下文传递  254


11.2 见微知著之 APM  260


11.2.1 APM基本概念  260


11.2.2 APM的字节码注入实现  261


11.2.3 其他平台的APM实现  272


11.3 小结  273


 





12.1 dex 文件结构  274


12.1.1 header  276


12.1.2 string_ids  278


12.1.3 type_ids  280


12.1.4 proto_ids  281


12.1.5 field_ids  282


12.1.6 method_ids  283


12.1.7 class_defs  284


12.1.8 data  288


12.1.9 link_data  288


12.2 Android字节码  288


12.2.1 Android字节码概述  288


12.2.2 常见的字节码指令介绍  289


12.3 Gradle 插件编写  295


12.3.1 自定义Gradle插件  295


12.3.2 独立的 Gradle 插件项目  296


12.4 Android字节码注入原理  297


12.4.1 Transform API介绍  297


12.4.2 字节码注入代码实现  299


12.5 小结  301



内容摘要

这是一本揭示JVM字节码“黑科技”的著作,它从原理和应用两个维度深入剖析了JVM字节码。书中内容涉及JVM字节码的大部分应用场景,如Java性能优化、软件防护与破解、APM等,通过大量实战案例讲解了它在这些场景中的实操技巧。


本书共 12 章,从逻辑上分为两大部分。



第1章详细剖析了class文件的内部结构;


第2章介绍了字节码的概念以及Java虚拟机栈和栈帧的相关内容;


第3章介绍了字节码的进阶知识,包括泛型擦除、synchronized关键字、反射的底层实现原理;


第4章介绍了javac编译器的原理,以及javac编译的七大阶段和各阶段的作用;


第5章从字节码的角度介绍Kotlin的常见语法糖、coroutine等原理;


第6章介绍了ASM和Javassist这两个字节码操作工具;


第7章介绍了Java Instrumentation的原理;


第8章介绍了JSR 269插件化注解处理原理。



第9章介绍了字节码在cglib、Fastjson等框架上的应用;


第10章介绍了反编译、破解、防破解和逆向工程的相关内容;


第11章介绍了APM的概况、分布式跟踪的基本原理等;


第12章详细介绍了Android dex文件的组成结构,以及Android字节码指令与Java字节码指令的区别。



主编推荐

资深后端工程师和Java工程师,CVTE(视源股份,股票代码:002841)高级技术经理,带领20多人的研发团队做教育相关的产品。

主要方向是 JVM 调优及故障诊断、TCP 源码剖析、高并发系统设计,致力于后端底层技术细节的研究。独立实现了公司级全链路APM 产品,在字节码、ASM、软件破解等方向有丰富的实战经验。

 vim 狂热爱好者,热衷分享,是掘金平台的优秀作者,在掘金上撰写过两本关于JVM和TCP 底层原理的小册子。

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP