极客时间-左耳听风-程序员攻略-Java底层知识

Java 字节码相关

字节码编程,也就是动态修改或是动态生成 Java 字节码。Java 的字节码相当于汇编,其中的一些细节。

不使用 JVMTI 操作字节码,而是用一些更好用的库。这里有三个库可以比较容易地做这个事。

  • asmtools - 用于生产环境的 Java .class 文件开发工具。
  • Byte Buddy - 代码生成库:运行时创建 Class 文件而不需要编译器帮助。
  • Jitescript - 和 BiteScript 类似的字节码生成库。

Byte Buddy,在 2015 年还获了 Oracle 的 “Duke’s Choice”大奖,其中说 Byte Buddy 极大地发展了 Java 的技术。

使用字节码编程可以玩出很多高级玩法,最高级的还是在 Java 程序运行时进行字节码修改和代码注入。这个方式使用 Java 这门静态语言在运行时可以进行各种动态的代码修改,而且可以进行无侵入的编程。

Java Agent 的技术。Java Agent 使用的是 “Java Instrumentation API”,其主要方法是实现一个叫 premain()的方法(嗯,一个比 main()函数还要超前执行的 main 函数),然后把你的代码编译成一个 jar 文件。在 JVM 启动时,使用这样的命令行来引入你的 jar 文件:java -javaagent:yourAwesomeAgent.jar -jar App.jar

更为详细的文章可以参看:“Java Code Geeks: Java Agents”

示例项目:jvm-monitoring-agent 或是 EntryPointKR/Agent.java。

如果想用 ByteBuddy 来玩,你可以看看这篇文章 “通过使用 Byte Buddy,便捷地创建 Java Agent”。

学习如何用 Java Agent 做监控,项目 Stage Monitor。

JVM 相关

Java 底层知识中另一个非常重要的内容——JVM。

JVM 的规格说明书,Java 8 的, The Java Virtual Machine Specification Java SE 8 Edition

中文翻译,GitHub Repo - “java-virtual-machine-specification”。

JVM Anatomy Park JVM 解剖公园,带你一点一点地把 JVM 中的一些技术解开。

学习 Java 底层原理还有 Java 的内存模型,官方文章是 JSR 133。还有马里兰大学的威廉·皮尤(William Pugh)教授收集的和 Java 内存模型相关的文献 - The Java Memory Model

内存方面两篇文章。

  • The JSR-133 Cookbook for Compiler Writers,解释了怎样实现 Java 内存模型,特别是在考虑到多处理器(或多核)系统的情况下,多线程和读写屏障的实现。
  • Using JDK 9 Memory Order Modes,讲了怎样通过 VarHandle 来使用 plain、opaque、release/acquire 和 volatile 四种共享内存的访问模式,并剖析了底层的原理。

垃圾回收机制 《The Garbage Collection Handbook》,这本书非常全面地介绍了垃圾收集的原理、设计和算法。但是这本书也是相当难啃的。中文翻译《垃圾回收算法手册

调优垃圾回收, Garbage Collection Tuning Guide ,它是 Hotspot Java 虚拟机的垃圾回收调优指南。

Quick Tips for Fast Code on the JVM 里面有写出更快的 Java 代码的几个小提示。

小结

Java 最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。Java 的字节码相当于汇编。

一般不使用 JVMTI 操作字节码,而是用一些更好用的库,如 asmtools、Byte Buddy 和 BiteScript 等。使用字节码编程可以玩出很多高级玩法,其中最高级的玩法是在 Java 程序运行时进行字节码修改和代码注入。

Java Agent 技术更好地实现这种高级玩法。

JVM 也是学习 Java 过程中非常重要的一部分内容。阅读JVM 的规格说明书是系统了解 JVM 规范的最佳文档, JVM Anatomy Park 系列文章,也非常值得一读。

Java 的内存模型和垃圾回收机制,出了如何调优垃圾回收方面的资料。

原文地址:https://www.cnblogs.com/17bdw/p/10851008.html

时间: 2024-11-08 11:31:30

极客时间-左耳听风-程序员攻略-Java底层知识的相关文章

极客时间-左耳听风-程序员攻略-软件设计

程序员练级攻略:软件设计 编程范式 学习编程范式可以让你明白编程的本质和各种语言的编程方式.因此,我推荐以下一些资料,以帮助你系统化地学习和理解. 极客时间的<编程范式游记>系列文章,目录如下. 编程范式游记(1)- 起源 编程范式游记(2)- 泛型编程 编程范式游记(3)- 类型系统和泛型的本质 编程范式游记(4)- 函数式编程 编程范式游记(5)- 修饰器模式 编程范式游记(6)- 面向对象编程 编程范式游记(7)- 基于原型的编程范式 编程范式游记(8)- Go 语言的委托模式 编程范式

极客时间-左耳听风-程序员攻略开篇-零基础启蒙

入门教程 Python基础: 与孩子一起学编程:以 Python 语言教你如何写程序 https://book.douban.com/subject/5338024/ 在线编程网址 Codecademy: Learn Python https://www.codecademy.com/learn People Can Program https://www.peoplecanprogram.com/ 在线练习 CodeAbbey http://www.codeabbey.com/index/ta

极客时间-左耳听风-程序员攻略-分布式架构入门

分布式系统涵盖的面非常广,具体来说涵盖如下几方面: 服务调度,涉及服务发现.配置管理.弹性伸缩.故障恢复等. 资源调度,涉及对底层资源的调度使用,如计算资源.网络资源和存储资源等. 流量调度,涉及路由.负载均衡.流控.熔断等. 数据调度,涉及数据复本.数据一致性.分布式事务.分库.分表等. 容错处理,涉及隔离.幂等.重试.业务补偿.异步.降级等. 自动化运维,涉及持续集成.持续部署.全栈监控.调用链跟踪等. 所有这些形成了分布式架构的整体复杂度,也造就了分布式系统中的很多很多论文.图书以及很多很

【技术思路】极客时间-左耳听风-开篇词2

07 | 推荐阅读:每个程序员都该知道的知识 每个程序员都应该要读的书 https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read <代码大全> <程序员修练之道> <计算机的构造和解释> <算法导论> <设计模式> <重构> <人月神话> <代码整洁之道&

# &quot;做中学&quot;之“极客时间”课程学习指导

目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时间课程介绍 Winter.程劭非.重学前端 宝玉.软件工程之美 蔡能.从0开始学游戏开发 陈旸.数据分析实战45讲 丁雪丰.玩转Spring全家桶 范学雷.代码精进之路 高磊.9小时搞定微信小程序开发 郝林.Go语言核心36讲 洪亮劼.AI技术内参 胡峰.程序员进阶攻略 胡忠想.从0开始学微服务 黄申.程序员

极客时间的专栏

专栏学习 极客时间 极客时间是极客邦科技出品的 IT 类知识服务产品,内容包含专栏订阅.极客新闻.热点专题.直播.视频和音频等多种形式的知识服务.产品形态包括移动 App,移动端网站.PC 端网站.微信平台等. 我订阅的专栏 丁奇老师带我们去学习mysql的45讲,有mysql的完整学习路径,数据库是编程界必备基础,还是比较推荐的. 这是我买的第一篇专栏,老师带我们去深入剖析tomcat和jetty,虽然不是特别新的技术,但是市场很成熟了,tomcat内部的代码还是很值的我们去学习的. 这是极客

极客时间 零基础学Python全套视频分享 尹会生 全套完结

极客时间 零基础学Python全套视频分享 尹会生  全套完结 链接: https://pan.baidu.com/s/1AirTGkP95vIoEKeXKo10jQ 提取码: cpf3 复制这段内容后打开百度网盘手机App,操作更方便哦 基于 Python 3 :考虑到网上很多教程都是基于 Python 2 来进行讲解,而 Python 最后一个 2.x 版本—— Python 2.7 的发布也已经是 8 年前的事情了,这几年一些大型项目已经停止了对 Python 2 的支持(Python 官

asm 极客时间学习

导入极客时间的asm demo学习,编译的时候遇到一些问题, 1, 导入的依赖太旧 2, groovy里面有语法错误(声明为final 又去赋值) 3, ASMCode文件里有些语法与现有语法不匹配错误(getType) 这里有些东西是使用groovy写的,主要也是对接给gradle看的,因为gradle认groovy和kotlin但是不认java, 这也可能是为什么didi的booster使用kotlin写. 4, 还有一点,这个作者也在issue里面说了,使用方法是: 执行编译asm对应的插

我在极客时间的首次分享

文章首发于公众号 松花皮蛋的黑板报 作者就职于京东,在稳定性保障.敏捷开发.高级JAVA.微服务架构有深入的理解 当时我将自己的文章投稿到InfoQ,然后总编辑郭总邮件邀请我来分享,于是有了这次值得纪念的演讲.欢迎朋友们前往极客时间App观看. 主题为:如何利用有效的资源抗住618大促流量 大概内容如下: 性能测试 性能优化 硬件优化可包括配置升级比如使用支持NIO的Tomcat版本代替低版本.集群水平扩展.摘取集群短板. 软件优化包括代码审查然后优化SQL和低性能代码. 扩展点 一.开发语言基