我正在考虑制作一个由大网格组成的对象,存储在二维数组中,以及在该网格上工作的函数.
如果我想遍历对象之外的这个数组中的元素,访问每个网格元素最可读和尊重隐私的方法是使用像grid.getElement(x,y)这样的函数,它只返回数组[ X] [Y].
当程序被编译成字节码时,这是否比通过grid.array [x] [y]直接访问数组效率低?
嗨,我想知道有多少Java类文件在不同的编译器中发生变化.因此,如果.java文件是由Sun JDK 1.4,1.5 1.6甚至IBM JDK编译的,那么实际字节的变化量是多少.我知道类文件在调试信息和模糊处理方面可能有所不同,但我们假设这些选项是相同的,所以包含调试信息,没有混淆.如果我在JDK 1.4编译的.class文件上运行了MD5或SHA-1,那么如果我在JDK 1.5中编译它,那么Hash会有所不同,但是当定位JDK 1.5时,目标是1.4吗?
与此相关的是,当使用不同的依赖关系时,类文件的二进制文件是否会发生更改,或者以不同的方式询问类文件的二进制文件是否会根据其依赖关系进行更改?
最后但并非最不重要的是有程序化的方法来分析.class文件的元数据,以便识别编译时使用的编译器版本和/或开关?
如果我从Windows 7中的python命令行导入module1.py,我看到相应的module1.pyc文件出现在Python32/pycache /文件夹中.我的理解是这个字节码是由Python解释器执行的,但是我可以删除module1.pyc文件,我的模块函数(module1.func1()等...)仍然可以从命令行调用.调用函数但没有.pyc文件时运行的是什么?编译字节码时它是否也被复制到Python shell的运行时内存中?
说我有一个这样的课:
public class Example{
private String secret = "Secret String";
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能添加一个getter来返回这个字符串(没有使用反射),所以我想以某种方式添加它
public String getSecret(){
return secret;
}
Run Code Online (Sandbox Code Playgroud) 在这些日子里,我正在尝试研究JVM字节码.我发现FNEG在维基百科上描述了操作码:use to negate a float.到底有什么好处呢?我试图在普通Java代码中对变量进行否定,Eclipse报告错误,即对于float类型的参数,否定运算符是未定义的.那有什么用呢?我怎么用呢?
有没有可用的方法或库可用于从Java字节码构建解析树?我的实际目标是创建AST。我知道有一些库可用于从源代码构建AST,只是想知道仅从字节码构建AST的方法。
例如,假设您有一个只打开窗口的java程序.这显然会导致不同操作系统的不同汇编代码(在Windows上最终必须调用CreateWindowEx).那么Java字节码(或任何其他类似语言)如何表示像这样的特定平台呢?
根据这个主题: 获取java.lang.VerifyError的原因
java.lang.VerifyError 获取执行jvm的版本是否比用于编译的jvm更新.
我们始终可以使用以下jvm选项解决此问题:-XX:-UseSplitVerifier.
根据这个:
使用此选项是"非常安全".
因此,我不明白为什么java.lang.VerifyError是阻止成功编译的问题.请澄清.也许对于检测字节码的库来说,它是不安全的?
当我们编写时,synchronized(some_object){}我们可以看到两个JVM指令monitorenter/monitorexit作为字节代码发出.
当我们编写时,synchronized(some_object){some_object.wait()}我希望看到特殊的JVM指令wait,但是没有 - 而是wait/notify实现为本机C函数.
为什么会出现这种不一致(要么将它们全部作为JNI还是作为java字节代码)?是否存在特定(历史)原因或仅仅是品味问题?
上下文:我对此感兴趣,因为monitorenter/monitorexit/wait/notify在字节码中包含所有内容将允许"不处理JNI的JavaByteCode程序正确性验证程序"来验证不使用JNI的并发Java程序.目前,这种假设工具必须解决等待/通知.
经过几个小时的研究,我没有找到一个具体的答案来解决我的问题而且我要疯了!
从编辑到执行的步骤:
1.(编译步骤)编写源代码后,编译程序.在此步骤中,它将转换为字节码.生成java.class文件(字节码).
2.(执行步骤)现在我执行程序.
现在的步骤是:代码 - >字节码 - >执行 - >机器码
所有这些步骤都与硬件和软件无关. 我对吗?
这称为JIT(只是及时编译),因此当我执行程序时,字节码被编译成机器码,然后才编译. 那么为什么这一步称为解释?
我提前感谢你的答案!
bytecode ×10
java ×9
jvm ×2
class ×1
getter ×1
machine-code ×1
md5 ×1
parsing ×1
polymorphism ×1
python ×1