jjzjj

Bytecode

全部标签

使用字节码进行 Java 调试

想知道有没有支持混合模式调试的IDE或者EclipsePlugin。当我搜索术语混合模式时,发现很多引用调试VM语言和native代码。但我指的是一种类似于编译语言(例如C)中可用的功能,在这种语言中,用户可以看到C源代码行以及相应的装配线,并且甚至可以在装配级别介入。(请原谅如果我将该功能称为混合模式而犯了命名错误)换句话说,我在调试java时寻找以下功能:能够在程序执行过程中使用java源代码和相应的字节码能够查看JVMPC寄存器和操作数堆栈能够查看其他JVM特定数据结构(例如常量池)这是为了了解Java源代码如何映射到字节码,以及在介入时如何影响各种JVM相关数据结构。

java - Byte Buddy 可以访问方法的局部变量名吗?

假设我有一个方法m:publicvoidm(){Stringfoo="foo";intbar=0;doSomething(foo,bar);}我想使用ByteBuddy检测代码,以便在m中调用doSomething时,它会自动将foo的值和bar到HashMap中,看起来很像:publicvoidm(){Stringfoo="foo";intbar=0;context.put("foo",foo);//newcodeinjectedcontext.put("bar",bar);//newcodeinjecteddoSomething(foo,bar);}有没有办法通过ByteBuddy

java - Java如何在多态中确定运行时调用的方法?

虽然多态的主要原则是在types方面解耦“whatfromwho”,但让我感到困惑的是,方法调用机制如何在多态中找出并调用正确的方法体。因为在Java中,所有方法绑定(bind)都是后期绑定(bind),除非方法是static、final或private,后期绑定(bind)由JVM完成,它为每个类预先计算方法表,然后在正常方法调用的运行时进行表查找。但是在多态性期间也会发生同样的事情。例如假设我有一个带有ride()方法的通用类CycleclassCycle{publicvoidride(){System.out.println("I'mRidinggenericCycle()");

java - 我有一个返回 0 或 1 的 Java 方法。我可以让它返回一个 boolean 值而不生成分支指令吗?

在字节码级别,Javaboolean值表示为0或1。我有一个结果为0或1的表达式,但它是用int类型计算的。一个简单的例子是:publicstaticintisOdd_A(intvalue){returnvalue&1;}publicstaticbooleanisOdd_B(intvalue){return(value&1)==1;}上述方法的字节码如下所示:publicstaticintisOdd_A(int);descriptor:(I)ICode:0:iload_01:iconst_12:iand3:ireturnpublicstaticbooleanisOdd_B(int);d

java - 处理 Java 字节码中的 Try/Catch 异常? ("stack height inconsistent")

我正在尝试在java字节码中进行一些错误处理。我首先尝试实现一些类似catch的子例程,我会在其中检查错误情况,然后跳转到适当的子例程,有点像:iconst_1iconst_0dupifeqcalldiverrgotoenddivtestcalldiverr:jsrdivErrorenddivtest:idiv...Moreinstructions...divError:getstaticjava/lang/System/outLjava/io/PrintStream;ldc"Ohdearyoudividedby0!"invokevirtualjava/io/PrintStream/p

java - 动态生成的 java 字节码是否需要任何优化?

我使用ASM生成了一些java字节码。通过以访问者模式遍历某种小型DSL的某种AST。而且我担心生成的字节码过于“简单”,即没有任何“编译时优化”。虽然在我的例子中,如果生成的字节码没有被优化也可以,但我还是不禁要问:那些在运行时生成字节码的项目是否需要做字节码优化?我知道对于jvm,大部分“优化”工作是在程序运行时通过jit编译完成的。所以编译时的字节码优化可能影响不大。但是,真的吗?对动态生成的字节码做字节码优化就完全没意义了吗?有没有人可以分享一些关于字节码在有和没有任何形式的优化之间的差异的经验,主要是在运行时性能方面? 最佳答案

java - 使用 javassist 在运行时强制所有 Java 算术为 strictfp?

鉴于在编写时考虑了性能的Java应用程序(即方法在源代码中有意未声明为“strictfp”),是否可以允许用户在strictfp模式下运行整个应用程序?看起来粗略的方法是使用使用javassist编写的自定义类加载器简单地将“strictfp”属性添加到所有类的所有方法。这类似于:http://www.verious.com/qa/no-strictfp-in-scala-workarounds/但是,类加载器需要将strictpf属性添加到应用程序中的所有类方法,包括私有(private)方法。(应用程序太大太复杂,无法显式列出可能需要strictfp属性的所有可能方法。)javas

java - 如何使用 Maven 为特定操作系统构建 jar?

我正在使用Eclipse的Maven构建一个将在远程服务器上运行的jar。我的系统运行的是OSX,服务器运行的是CestOS。对于我需要的项目tensorflowlibrary.Maven成功解决了依赖关系,因此我能够在本地运行该项目。但是,在服务器上我收到错误消息,指出tensorflow库不存在,因为默认情况下maven仅包含macosx版本。我如何强制maven在构建期间用linux版本替换tensorflow的macosx版本?可以找到适用于不同平台的TensorFlowjava库here.附言我已经尝试在系统作用域指向jar的pom中添加依赖项。

java - 字节码和位码有什么区别

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatarethedifferencesbetweenLLVMandjavabytecode?例如,在LLVM中,它说..WhatiscommonlyknownastheLLVMbitcodefileformat(also,sometimesanachronisticallyknownasbytecode)isactuallytwothings:abitstreamcontainerformatandanencodingofLLVMIRintothecontainerformat.我只知道Java字节码,它

java - 如何使用 Byte Buddy 创建默认构造函数

我想拦截对我的一个类的一些方法调用,但这些类没有默认构造函数。给定以下类,我将如何设置ByteBuddy以同时创建一个公共(public)无参数构造函数来创建生成的类?publicclassGetLoggedInUsersSagaextendsAbstractSpaceSingleEventSaga{privatefinalUserSessionRepositoryuserSessionRepository;@InjectpublicGetLoggedInUsersSaga(finalUserSessionRepositoryuserSessionRepository){this.us