首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 7转义分析不起作用

Java 7转义分析不起作用
EN

Stack Overflow用户
提问于 2012-06-28 14:18:53
回答 3查看 670关注 0票数 2

对于下面的给定代码,我看到了很多GC活动。根据我的理解,这是一个适合EA的场景。为什么EA是无效的。DummyObject没有在其中分配任何内容。使用的JVM选项:-server、-verbosegc。

代码语言:javascript
复制
   static void anayzeEA()
{
    for(int i = 0 ; i < 100000000; i++) {
        DummyObject obj = new DummyObject();
        if(obj.hashCode() == 97787) { //to prevent the obj being optimized            
         System.out.println(obj.hashCode());
        }
    }

}
EN

回答 3

Stack Overflow用户

发布于 2013-01-15 00:01:13

请参阅相关的Q&A here,其中建议您可以下载调试JDK并使用命令行选项:-XX:+UnlockDiagnosticVMOptions -XX:+PrintEscapeAnalysis -XX:+PrintEliminateAllocations

在事件发生时打印出逃逸分析事件。

票数 1
EN

Stack Overflow用户

发布于 2012-06-29 14:29:01

一些观察

看起来obj.hashCode()是一个本机调用,对象可能会转义。将obj.hashCode()更改为obj.getMyCode() (返回System.currentTimeMillis()% staticObjCount的方法)使其正常工作。没有观察到GC活动。然而,下面的方法从来没有得到有效的逃逸分析,所有的建议都提到了

here

代码语言:javascript
复制
 public static long test1() 
{
    long r = 0;
    byte[] arr = new byte[(int)System.currentTimeMillis() % 1024]; 
    if(arr.length == 998 ) {
        ++r;
    }
    return r;
}

-server -verbosegc -XX:CompileThreshold=1使用的JVM选项

Test1被多次调用。还是老样子。Java在堆中分配内存,GC的出现使一切变慢。对这个功能太兴奋了。

票数 0
EN

Stack Overflow用户

发布于 2013-01-15 00:23:02

Java API说:

类Object定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。)

因此,您正在生成对象,为每个对象生成不可预测的hashCodes,并将它们与某个值进行比较。另外,它是一个本机方法,所以JIT不知道里面发生了什么。

逃逸分析可能不错,但目前还没有对水晶球的支持。;-)尝试使用您自己的方法覆盖它,返回12345。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11239028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档