检查字节码,我注意到javac似乎checkcast在转换为数组类型时复制指令.
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
Run Code Online (Sandbox Code Playgroud)
javap反汇编的javac编译版本
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #2; //class "[Ljava/lang/Object;"
4: checkcast #2; //class "[Ljava/lang/Object;"
7: astore_2
8: return
Run Code Online (Sandbox Code Playgroud)
测试jikes显示预期的单演员
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
Run Code Online (Sandbox Code Playgroud)
checkcast如果对象不能被视为请求的类型而不执行任何操作,则应该引发异常,因此我不明白为什么它可能有助于使转换加倍.我没有看过JDK的来源,看看它是如何产生的,如果这有助于解释原因(也许这意味着它的暗示).
当我在Ubuntu上构建Jikes RVM时,我收到了这个错误.任何的想法?
bin/buildit localhost production
---> Config: production
/bin/bash --login -c '/bin/bash --login -c " cd /home/jack/Programs/jikesrvm-3.1.2 && export JAVA_HOME=/opt/jdk1.6.0 && ant very-clean -Dhost.name=ia32-linux && ant check-components-properties -Dhost.name=ia32-linux -Dtarget.name=ia32-linux -Dcomponents.cache.dir=/home/jack/.buildit_components_cache && ant -Dtarget.name=ia32-linux -Dconfig.name=production -Dhg.revision= -Dhost.name=ia32-linux -Dcomponents.cache.dir=/home/jack/.buildit_components_cache "'
Error: JAVA_HOME is not defined correctly.
We cannot execute /opt/jdk1.6.0/bin/java
Wed Jun 13 12:23:37 EDT 2012
===================== Summary =====================
Local : /home/jack/Programs/jikesrvm-3.1.2
Build : ubuntu:/home/jack/Programs/jikesrvm-3.1.2
Target : ubuntu:/home/jack/Programs/jikesrvm-3.1.2
Start : Wed Jun 13 12:23:37 EDT 2012
Config : production [FAILED Wed Jun …Run Code Online (Sandbox Code Playgroud) 我最近听说过Jikes RVM,我试图通过它的功能来提供其他虚拟机不提供的功能以及它的可扩展性.
所以,虽然通过网站上的功能列表,我发现了一个有趣的点
高性能.Jikes RVM是一款高性能编译器,非常适合用于大型项目
问题
上面的陈述是多么真实,因为我在过去的5年里一直在使用Java,之前从未听说过Jikes RVM.大部分开发都是在Hot Spot VM上完成的(由Sun提供).我知道,还有其他VM,但从未听说过Jikes RVM.可能原因之一可能是我对Jikes RVM的认识不足,但很难消化,因为很多人都没有意识到这样的高性能VM.
究竟应该提示您使用Jikes RVM的场景是什么?