草庐IT

Bytecode

全部标签

java - 字节码指令和处理器操作之间的关系

Java规范保证原始变量赋值始终是原子的(long和double类型除外。相反,Fetch-and-Add对应于著名的i++增量操作的操作将是非原子的,因为会导致读取-修改-写入操作。假设这段代码:publicvoidassign(intb){inta=b;}生成的字节码是:publicvoidassign(int);Code:0:iload_11:istore_22:return因此,我们看到分配由两个步骤(加载和存储)组成。假设这段代码:publicvoidassign(intb){inti=b++;}字节码:publicvoidassign(int);Code:0:iload_1

java - JVM上的内存分配是无锁的吗

当你在Java中做一个newObject()时,jvm是使用无锁算法分配内存还是需要加锁?在这种情况下,我指的JVM是HotspotVM。据我所知,它只需要递增一个指针即可超快地分配内存。但是在多线程的情况下,这个增量是否需要加锁或者CAS? 最佳答案 如前所述,默认是使用tlab。thisglossary中描述了行为如下TLABThread-localallocationbuffer.Usedtoallocateheapspacequicklywithoutsynchronization.Compiledcodehasa"fast

Java 字节码 : types of local variables?

根据这篇文章http://slurp.doc.ic.ac.uk/pubs/observing/linking.html#assignment:DuetothedifferencesininformationbetweenJavacodeandbytecode(bytecodedoesnotcontainthetypesoflocalvariables),theverifierdoesnotneedtochecksubtypesforassignmentstolocalvariables,ortoparameters.我的问题:为什么字节码不包含局部变量的类型信息,而它确实包含参数和返回

java - 导入语句字节码意义

比方说,类中有一些导入语句。当为该类生成字节码时,这些导入语句会发生什么。如果导入语句在运行时被忽略,那么在运行时如何解决对该类方法的依赖。 最佳答案 import语句的目的只是为了让代码的人类读者(和作者)的生活更轻松。因此,它们被字节码中对完全限定的类/方法名称的引用所取代。未使用的导入语句将被忽略。 关于java-导入语句字节码意义,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

java - 字符串何时何地初始化/存储在 Java 源代码中?

这是我的源代码:publicclassKoray{publicstaticvoidmain(String[]args){System.out.println("Thisisasampleprogram.");}}当我编译它时,我得到了字节码。当我使用十六进制查看器查看字节码时,我看到了以下部分:195468697320697320612073616D706C652070726F6772616D2E可以理解为Thisisasampleprogram.如果字节被解释为字符。当我这样做的时候javap-cKoray.class反汇编我看到的这个类:Compiledfrom"Koray.jav

java - 什么调用类初始化方法 <clinit> 以及何时调用?

我知道new、dup、invokespecial和astore字节码模式将调用初始化方法在类实例化期间。什么调用了特殊的方法,什么时候发生?我的猜测是在之前方法被调用。这是否记录在JVM规范或Java语言规范中? 最佳答案 JVM规范§2.9.SpecialMethods:Aclassorinterfacehasatmostoneclassorinterfaceinitializationmethodandisinitialized(§5.5)byinvokingthatmethod.Theinitializationmethodo

java - 为什么 Java 6 编译的类大小大于 Java 5?

我们注意到,当我们在Java6上编译我们的类时,它们总是比Java5大。我知道到目前为止字节码没有变化,所以我假设Java6编译器加入了更多内容。这是所有必需的,还是有任何方法可以关闭它并仍然编译Java6源代码? 最佳答案 版本6javac正在类文件中生成额外的“堆栈映射”属性,以使jvm的验证更容易和更快。我怀疑大小差异太大,您始终可以使用-target1.5选项使其生成与早期版本相同的字节码。编辑:有关此新属性的详细信息可以在jsr202的第4.8.4节中找到4.8.4TheStackMapTableAttributeThes

java - 为什么用某些编译器编译的程序可以被反编译而其他的(实际上)不能?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我以前认为Java可以反编译,因为它编译成字节代码而不是目标代码。这是错误的,因为隐含的假设字节代码比目标代码“更易于阅读”。为什么用Java写的程序可以这么容易被反编译,甚至有相同的标识符(变量名)?听说C/C++只能反汇编成汇编,不能反编译成源码,为什么?

android - 配置项目 ':app' 时出现问题。在 react-native 中并给出一些字节码作为错误

在我运行react-native应用程序时创建项目后,itgivesmethiserror.FAILURE:Buildfailedwithanexception.*Whatwentwrong:Aproblemoccurredconfiguringproject':app'.>Failedtonotifyprojectevaluationlistener.>Uninitializedobjectexistsonbackwardbranch142ExceptionDetails:Location:com/android/build/gradle/internal/pipeline/Vari

android - Cordova 错误 : Dex: Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code

我有一个ionic项目。它已成功构建并在我的android手机中运行。突然有一天,当我运行命令“ioniccordovarunandroid”时,我得到如下构建错误:Dex:Errorconvertingbytecodetodex:Cause:Dexcannotparseversion52bytecode.ThisiscausedbylibrarydependenciesthathavebeencompiledusingJava8orabove.Ifyouareusingthe'java'gradleplugininalibrarysubmoduleaddtargetCompatibi