2013-11-29 3 views
1

Это метод toPath() класса File (jdk7)Почему мы должны использовать переменную Темп в File.toPath() (jdk7)

private volatile transient Path filePath; 

    public Path toPath() { 
     Path result = filePath; 
     if (result == null) { 
      synchronized (this) { 
       result = filePath; 
       if (result == null) { 
        result = FileSystems.getDefault().getPath(path); 
        filePath = result; 
       } 
      } 
     } 
     return result; 
    } 

Мне очень интересно, почему мы используем result переменную как буфер. Почему мы не можем работать с файловым файлом. Я прочитал, что это проблема с производительностью, и мы можем иметь более высокую производительность при использовании переменной энергонезависимой памяти. Но я не понимаю, как мы можем получить эту производительность?

Может ли кто-нибудь прояснить это для меня, пожалуйста?

ответ

1

Всегда быстрее работать с энергонезависимой переменной.

Когда вы изменяете изменчивую переменную, все чтения и записи переходят прямо к «основной памяти». который медленнее, чем использование кеша потоков.

здесь интересная статья: http://www.javamex.com/tutorials/synchronization_volatile.shtml

+0

Но, как я понимаю здесь [Path result = filePath;], мы также читаем переменную volatile. Поэтому нам все равно нужно сначала прочитать изменчивость. Если я напишу, в чем смысл? –

+0

, где мы можем избежать чтения или записи накладных расходов, если нам еще нужно сделать некоторое чтение, чтобы создать экземпляр переменной результата? –

+0

Я имею в виду, что я понимаю, что волатильность памяти исключает кеш, и это ресурсоемкое. Но, с моей точки зрения, фактическое число чтения/записи прямой памяти не было изменено. –

1

Если метод вызывается только один раз это мало что меняет. Если он вызывается дважды или более, вы сохраняете одно изменчивое чтение при каждом последующем вызове. И хотя волатильное чтение может быть таким же быстрым, как нестабильное чтение на некоторых архитектурах (обычно x86), оно может быть значительно медленнее на других.

Смежные вопросы