会在Android中使用易失性影响应用程序的性能吗?

时间:2019-12-15 15:31:08

标签: java android singleton volatile android-singleline

我正在尝试将模块实例设置为单例。碰到了article,其中谈到了实现单例实例创建的各种方法,还涉及了破坏性的双重检查锁定以及使用volatile避免这种情况的方法。

在阅读了更多有关volatile的内容之后,线程似乎永远不会缓存该变量,并且将始终从主内存中读取该变量以进行计算。如果我使用volatile关键字实现单例,则我的应用始终会从主内存中读取,因此会受到性能的影响。

Image source

遇到了以下疑问,

  1. 线程本地内存将驻留在哪里?它们将在哪一层为L1,L2或L3缓存?
  2. 如果我使用volatile实现我的单例,这意味着我每次都在从主内存中读取数据-那么这是否意味着我正在增加CPU周期?
  3. 如果我在UI线程中使用此应用程序,将会对性能产生影响吗?

    enter image description here

示例易失性实现,

private static volatile ResourceService resourceInstance;
//lazy Initialiaztion
public static ResourceService getInstance () {
    if (resourceInstance == null) { // first check
        synchronized(ResourceService.class) {
            if (resourceInstance == null) { // double check
                // creating instance of ResourceService for only one time
                resourceInstance = new ResourceService ();                    
            }
        }
    }
    return resourceInstance;
}

0 个答案:

没有答案