-->

左耳听风_080_79_程序员练级攻略Java底层知识

你好,我是陈浩网名做耳朵house.那前两节课啊,我主要分享的是系统底层方面的内容。

那今天呢我们进入高手成长篇的第二部分,java底层知识。

首先呢,java最黑科技的玩法就是字节码编程,也就是动态修改或者动态生成的java字节码。

Java的字节码相当于汇编。

那其中的一些细节呢,你可以从几个教程中学习。

第一篇文章叫做java zone introduction to java backcode.这篇文章图文并茂的向你讲述了java字节码的一些细节,是一篇很不错的入门文章。

第二个呢是IBM developer works, java bad cocode.那虽然这篇文章很老了,但它仍然是一篇非常好的讲java字己码的文章。

那第三个呢是java back code and JVMTI examples.这是一些使用JVM two interface操作。

扎拉斯解码的比较实用的例子,包括方法调用统计、静态字节码、修改heap tagging,还有heap walking.那当然啊一般来说我们不会直接使用JVMTI来操作字节码,而是用一些更好用的库。

那这里呢有三个库可以帮你比较容易的做这个事儿。

第一个库呢是ASM tools啊,它是用于生产环境的java点class文件的开发工具。

第二个是代码生成库battle value运行式创建class文件,而不需要编译器的帮助。

第三个呢是和backscript类似的字节码生成库javasript.就我而言呢,我更喜欢拜ate八零,他在二零一五年还获得了oracle的dukes choice大奖。

那其中呢就说了拜个巴里极大的发展了java的技术,使用字节码编程可以玩出很多高级的玩法。

那最高级的还是在java程序运行时进行字节码修改和代码注入,这听起来是不是一些很黑客也很黑科技的事呢?啊,是的,这个方式使用java这门静态语言在运行时可以进行各种动态的代码修改,而且呢可以进行无侵入的编程。

比如说啊我们不需要在代码中买点来做统计或者监控,而可以使用这种技术,把我们的监控代码直接以字节码的方式注入到别人的代码当中。

而从而实现对实际程序的运行情况进行统计和监控。

那如果你看过我的编程范式游记,你就知道这种技术的威力了。

他可以很魔法的把业务逻辑和代码控制分离开来。

要做到这个事儿呢,你还需要学习一个叫做java agent的技术。

Java agent使用的是java instrumentation的API.那它的主要方法呢是实现一个叫premain的方法啊,它是一个比main函数,还要超前执行的main函数。

然后呢把你的代码编译成一个尔文件。

在JVM启动的时候呢,我们使用文中这段命令来引入你的这r文件。

那更为详细的文章呢,你可以参看java code giicks java agents.你还可以看一下这个示例项目,GM monitoring agent啊,或者get have上面来自andtry point k二的agent叫java文件。

那如果想用bad body来玩呢,你也可以看一看这篇文章叫做通过使用bad body便捷的创建java agent.那如果你想学习如何使用java agent做监控呢,你还可以看一下stage monitor这个项目。

那接下来呢我讲一讲java底层知识中另一个比较重要的内容。

这边啊,那说起GBM呢,你有必要读一下GBM的规格说明书。

我在文中呢放了一个java八的。

对于规格说明书的阅读呢,我认为是系统了解JVM规范的最佳文档。

这个文档可以让你对于搞不清楚或者是诡异的问题。

恍然大悟。

那关于中文翻译呢,有人在github上面开了个rapple啊,叫做java virtual machine specialification.另外呢我也推荐一下j个m natomy park, j个m解剖公园,那这是一个系列的文章,每篇文章都不长,但是呢都很精彩啊。

带你一点一点的把GVM中的一些技术解开学习java的底层原理啊,还有java的内存模型。

官方的文章是JSR幺三三,还有马里兰大学的威廉皮尤教授收集的和java内存模型相关的文献叫java memory model.你可以从文中的链接前往浏览。

对于内存方面呢,道格利有两篇文章也是很有价值的。

第一篇是在JS二one hundred thirty three cotebook for compiler writers.他解释了怎样实现java内存模型啊,特别是在考虑到多处理器系统的情况下,多线程和读写屏障的实现。

第二篇的标题叫做using JDK nine memory auder modes.他讲了怎样通过vera handle来使用plain opic release acquire和volatile这四种共享内存的访问模式,并且剖析了底层的原理。

另外呢垃圾回收机制也是需要好好学习了。

在这里呢我推荐一本书叫做the garbage collection handey book,它在豆瓣上的评分居然到了九点九。

这本书非常全面的介绍了垃圾收集的原理、设计和算法。

但是呢这本书啊也是相当难啃的。

它的中文翻译垃圾回收算法手册翻译的很一般啊,有人说翻译的很烂,所以说如果可能啊还是要读英文版的那如果你对从事垃圾回收相关的工作有兴趣呢,那你要好好看一下这本书。

那当然啊更多的人可能只需要知道怎么调优垃圾回收就可以了。

那么我推荐读一读gabbage collection tuning guite,他是housebold java虚拟机的垃圾回收调优指南。

对你很有帮助。

另外呢quick tips for fast code on AGVM也是一篇很不错的文章。

这里面呢有几个写出更快的java代码的小提示值得一读。

好了,我们总结一下今天学到的内容。

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

Java的字节码相当于汇编学习,其中的细节很有意思。

为此呢我精心挑选了三篇文章供你学习。

我们一般不使用JVMTI来操作字节码,而是用一些更好用的库。

比如说ASM、 tooth、 bad、 body和bicscript等等。

使用字节码编程可以玩出很多高级的玩法。

那其中最高级的玩法就是在java程序运行时进行字节码的修改和代码的注入。

那同时呢我介绍了java a站的技术,帮助你更好的实现这种高级玩法。

Jvm也是学习java过程中非常重要的一部分内容。

我推荐呢阅读一下GVM的规格说明书。

我认为它是系统了解JVM规范的最佳文档啊,可以让你对于搞不清楚或者是诡异的问题。

恍然大悟。

同时呢我也推荐了这外面natomi park系列文章,也非常值得一读。

随后我介绍的是java的内存模型和垃圾回收机制啊,尤其是给出了如何调优垃圾回收方面的资料。

那这些内容啊都很底层,但也都很重要。

对于想成为高手的你来说啊,还是有必要花时间来啃一啃的下一节课呢?是数据库方面的内容。

我们将探讨各种类型的数据库非常有意思,敬请期待。