Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将使用volatile impact app';安卓系统的性能如何?_Java_Android_Singleton_Volatile - Fatal编程技术网

Java 将使用volatile impact app';安卓系统的性能如何?

Java 将使用volatile impact app';安卓系统的性能如何?,java,android,singleton,volatile,Java,Android,Singleton,Volatile,我正在尝试将我的模块实例设置为singleton。在这里,它谈到了实现单例实例创建的各种方法,还谈到了破坏的双重检查锁定以及使用volatile避免这种情况的方法 在阅读了更多关于volatile的内容后,线程似乎永远不会缓存这个变量,而是总是从主内存中读取它的计算。如果我使用volatile关键字实现我的单例,我的应用程序会受到性能的影响,因为它总是从主内存读取数据 有以下疑问, 线程本地内存将驻留在哪里?它们是一级缓存、二级缓存还是三级缓存 如果我使用volatile实现我的单例,这意味着

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

在阅读了更多关于volatile的内容后,线程似乎永远不会缓存这个变量,而是总是从主内存中读取它的计算。如果我使用volatile关键字实现我的单例,我的应用程序会受到性能的影响,因为它总是从主内存读取数据

有以下疑问,

  • 线程本地内存将驻留在哪里?它们是一级缓存、二级缓存还是三级缓存
  • 如果我使用volatile实现我的单例,这意味着我每次都在从主内存读取数据,那么这是否意味着我在增加CPU周期
  • 如果我在UI线程中使用此功能,我的应用程序会对性能产生影响吗

  • 示例volatile实现

    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;
    }