字节码增强

Posted wangflower

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节码增强相关的知识,希望对你有一定的参考价值。

之前看了美团技术团队推送的一篇文章,介绍了字节码增强技术,可的很好,自己也记录一下,增强一下记忆,也方便日后巩固学习,有兴趣的可以去搜索美团技术团队的原文

字节码是JVM的底层基础知识,如果能够掌握对于排查问题会有更深层次的理解

1.什么是字节码

首先我们看看什么是字节码,找到一个.class文件,看看长什么样子

技术图片

 

 Java之所以可以一次编译,到处运行,首先是因为JVM针对各种操作系统和平台都进行了定制,二是无论在什么平台,都可以通过javac命令将一个.java文件编译成固定格式的字节码(.class文件)供JVM使用

之所以被称之为字节码,是因为.class文件是由十六进制值组成的,JVM以两个十六进制值为一组,就是以字节为单位进行读取

2.字节码的结构

.java文件编译后生成的字节码文件,打开如上图,JVM对字节码是有规范要求的,要求每一个字节码文件都要有十部分按照固定的顺序组成,整体的结构和顺序如下图:

技术图片

 

 (1)魔数

所有的.class文件的前4个字节都是魔数,魔数以一个固定值:0xCAFEBABE,放在文件的开头,JVM就可以根据这个文件的开头来判断这个文件是否可能是一个.class文件,如果是这个开头,才会往后执行下面的操作

技术图片

一直困惑的java的图标为什么是一杯咖啡,看到这里就大概明白了,这个魔数的固定值是Java之父James Gosling指定的,意为CafeBabe(咖啡宝贝)

 

以上是关于字节码增强的主要内容,如果未能解决你的问题,请参考以下文章

浅谈字节码增强技术系列1-字节码增强概览

字节码增强技术探索

JVM——字节码增强技术简介

字节码增强

字节码增强技术探索

动态字节码技术 javassist 初探