当前位置: 首页 > 面试题库 >

什么是Java字节码注入?

太叔景同
2023-03-14
问题内容

Java字节码注入到底是什么?为什么要使用它?


问题答案:

Java代码编译为字节码(Foo.java ->> Foo.class)。字节码注入正在Foo.class运行时进行修改,以在加载和运行之前立即将代码注入其中。

想象一个场景,我想找出多少次方法

public void bar();

在中被调用Foo.class。我可以在类加载期间使用java.lang.instrument该拦截器编写一个代理Foo.class,然后使用ASM对其进行修改,以便bar()调用com.amir.agent.incrementCount()方法条目。

现在,我可以运行我的程序了:

$java -javagent:MyAgent Foo  //assuming Foo has a main() defined

并且在运行时,Foo.class不仅可以完成其正常工作,而且还可以完成我在MyAgent每次bar()调用时定义的工作。

有关从头开始编写代理的指示,请从此处开始。



 类似资料:
  • 问题内容: 我正在阅读Java字节码,并看到以下内容: 什么意思 以及如何用字节码编写程序? 问题答案: Java类文件和字节码 Java类文件(字节码文件)由不同的组件组成: http://en.wikipedia.org/wiki/Java_class_file 幻数:0xCAFEBABE 类文件格式的版本:类文件的次要和主要版本 常量池:类的常量池 (…) 栏位:课程中的所有栏位 方法:类中

  • 本文向大家介绍什么是Python字节串?,包括了什么是Python字节串?的使用技巧和注意事项,需要的朋友参考一下 字符串是字符序列;这些是一个抽象概念,不能直接存储在磁盘上。字节字符串是字节序列-可以存储在磁盘上的东西。它们之间的映射是一种编码-其中有很多(并且无限可能)-并且您需要知道在特定情况下哪种适用才能进行转换,因为不同的编码可能会映射相同的字节到另一个字符串。例如,相同的字节字符串可以

  • 问题内容: 我多次听到Java妨碍JIT(即时)编译的情况,其可跨平台移植的字节码被JVM“解释”。但是,我真的不知道字节码是什么,以及JVM在Java语言体系结构中的实际含义。我想进一步了解他们。 问题答案: JVM(Java虚拟机)具有与真实计算机一样的指令集。给该指令集的名称是Java字节码。在Java虚拟机规范中对其进行了描述。其他语言在执行之前会被翻译成字节码,例如ruby和python

  • 问题内容: 我实际上对Java中字符串的编码感到困惑。我有一些问题。如果您知道答案,请帮助我: 1)内存中Java字符串的本地编码是什么?当我以哪种格式书写时,它将被存储?由于Java与机器无关,因此我认为系统不会进行编码。 2)我在网上读到“ UTF-16”是默认编码,但我感到困惑,因为我写的时候说我得到了ASCII表中的字符编号。那么ASCII和UTF-16是否相同? 3)另外,我不确定字符串

  • 借助Spring实现具有依赖关系的对象之间的解耦。 对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。 获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。