首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM优化会分解我的代码吗?

JVM优化会分解我的代码吗?
EN

Stack Overflow用户
提问于 2014-06-17 20:57:14
回答 3查看 195关注 0票数 0

我有一个由多个线程调用的方法:

代码语言:javascript
复制
private final static Object lock = new Object();
public String createDirectory()
{
    File file = new File("D:"+File.separator+"test");
    if(!file.exists() || !file.isDirectory())//if file doesn't exist then create a new directory.
    {
        synchronized(lock)
        {
            if(!file.exists() || !file.isDirectory())//----> (1)
            {
                boolean isCreated = file.mkdir();
            }
        }
    }
    return file.getAbsolutePath();
}

在上述给定的方法中,JVM优化器是否可能注释掉标记为(1)的代码?我怀疑这是因为,目录的存在是连续两次检查的。考虑到这是不必要的冗余检查,JVM优化器可能会注释掉行-> (1)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-23 05:01:48

正如@yshavit所指出的

因为File方法最终将作为OS调用结束,而且JVM不能假设这些方法没有副作用(并且不受它们的参数以外的状态的影响),所以JVM不会通过注释掉该部分来优化涉及if(!file.exists() || !file.isDirectory())的代码。

票数 1
EN

Stack Overflow用户

发布于 2014-06-17 21:00:27

不是的。它不会被优化。

如果JVM优化了一个标准的双重检查锁模式,那就有点垃圾了。

票数 1
EN

Stack Overflow用户

发布于 2014-06-17 21:01:11

不是的。编译器优化不会改变程序的流程。具体来说,方法调用永远不会被跳过。

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

https://stackoverflow.com/questions/24273146

复制
相关文章

相似问题

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