草庐IT

Bytecode

全部标签

java - 字节码 .<init>()V 与 .<init>(Z)V 之间的区别

当我观察我的Java项目字节码时,我看到以下字节码:java.lang.Object.()Vjava.lang.Boolean.(Z)V()V和(Z)V是什么意思 最佳答案 java.lang.Object.()V是java.lang.Object上的一个void方法(V),不带任何参数。java.lang.Boolean.(Z)V是java.lang.Boolean上的一个void方法,它接受一个boolean(ZsinceB是byte)参数。简而言之,abc.def.WXYZ(IIIIIIIIIIIIII)J^^^target_

java - 为什么下面的代码在java字节码中会翻译成一条new + dup op指令?

假设我有一个Fraction类:classFraction{.../**Invertcurrentfraction*/publicFractioninverse(){returnnewFraction(den,num);}...}这就是上述方法的字节码:0new#13dup4aload_05getfield#168aload_09getfield#1412invokespecial#27>15areturn我试图理解为什么位置3的指令首先放在那里。我想说我们只需要执行以下操作即可使其工作:new#1aload_0getfield#16aload_0getfield#14invokesp

java - 反射性能 : quality byte code in JVM

编辑2:具有完全面向对象实现的程序是否具有高性能?大多数framework都是用它的全部功能编写的。但是,反射也被大量用于实现它,例如AOP和依赖注入(inject)。反射的使用在一定程度上影响了性能。那么,使用反射是一种好的做法吗?除了编程语言构造的反射之外,还有其他选择吗?应在多大程度上使用反射? 最佳答案 反射,就其本身和本质而言,是缓慢的。参见thisquestion更多细节。这是由几个原因造成的。JonSkeetexplainsitnicely:Checkthatthere'saparameterlessconstruct

java - x = x + 1 和 x++ 的实现差异

我的教授最近说,虽然x=x+1和x++显然会给出相同的结果,但它们在JVM中的实现方式有所不同。这是什么意思?编译器不是这样的:嘿,我看到x++所以我将它切换到x=x+1并继续?我怀疑在效率方面有什么不同,但如果在这些情况下组装会有所不同,我会感到惊讶...... 最佳答案 Myprofessorrecentlysaidthatalthoughx=x+1andx++willobviouslygivethesameresult我猜你教授的意思可能是-x=x+1和x++之后x的值将相同。只是重新措辞,因为它似乎在解释问题时造成混淆。虽然

java - JVM 如何区分 Scala 字节码和 Java 字节码?

因为Scala也生成字节码并由JVM执行。我想知道JVM如何区分Scala字节码和Java字节码。谁能解释一下?ScalacMyprogram.scalajavaMyprogram所以这个陈述完全没问题? 最佳答案 IamwonderingHowJVMdistinguishbetweenScalabytecodeandJavabytecode.事实并非如此。没有Scala字节码这样的东西。Scala编译器编译成JVM字节码。就像Java编译器也编译成JVM字节码一样。JVM对Scala一无所知。它对Java也一无所知。它也不了解Gr

java - 如何从 repl 检查 Clojure 生成的 java 字节码?

我找不到关于这个主题的太多信息。看起来可以使用jswat来完成此操作,但我找不到任何分步教程。 最佳答案 您可以为此使用非反汇编库。https://github.com/gtrak/no.disassemble作为插件添加到您的Leiningen项目中::plugins[[lein-nodisassemble"0.1.3"]]=>(use'no.disassemble)nil=>(println(disassemble(fn[](+12))))//Compiledfromform-init9238501799627991.clj(v

java - 如何在 Java 中实现包装装饰器?

问题是创建现有对象的动态增强版本。我无法修改对象的Class。相反,我必须:子类化将现有对象包装在新的Class中将所有原始方法调用委托(delegate)给包装对象实现由另一个接口(interface)定义的所有方法添加到现有对象的接口(interface)是:publicinterfaceEnhancedNode{NodegetNode();voidsetNode(Nodenode);SetgetRules();voidsetRules(Setrules);MapgetGroups();voidsetGroups(Mapgroups);}与ByteBuddy我设法子类化并实现了我的

ASM 中的 Java 方法参数值

我正在尝试获取Java程序方法参数的值。我正在使用ASM检测字节码并获取这些值。但是,我遇到了一些麻烦。这是用于检测代码的visitCode()方法。它正在做的是:创建一个空数组来存储收集到的参数。对于每个参数,将其值加载到数组中。将此数组发送到我代理的OnMethodEntry方法(将在其中使用值)。.@OverridepublicvoidvisitCode(){intparamLength=paramTypes.length;//Createarraywithlengthequaltonumberofparametersmv.visitIntInsn(Opcodes.BIPUSH,

java - ASM 4(Java 库)教程?

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我最近一直在使用Java库“ASM”,它用于在运行时修改字节码,以防人们不知道,而且我没能找到关于ASM4的教程。除了ASM4的官方手册,其中引用了甚至不存在的ASM类。我想知道是否有人知道该库的任何教程,其中涵盖了基本到中级的内容,例如将一些代码插入到方法中。

Java 类文件编辑器

反编译和编辑类文件最有效的方法是什么?我真的只想编辑文件中的一行代码,但是JBE(java字节码编辑器)不允许我更改浮点常量。反编译类并重新编译是行不通的,因为我已经尝试过了,我遇到了很多依赖错误和名称错误。我怎样才能有效地解决这个问题?谢谢 最佳答案 我个人喜欢使用并且正好适合您的问题:http://dirty-joe.com/ 关于Java类文件编辑器,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co