Rumah  >  Artikel  >  Java  >  Adakah Caching Rujukan Kaedah dalam Java 8 Menawarkan Keuntungan Prestasi?

Adakah Caching Rujukan Kaedah dalam Java 8 Menawarkan Keuntungan Prestasi?

Patricia Arquette
Patricia Arquetteasal
2024-11-17 06:27:03851semak imbas

Does Method Reference Caching in Java 8 Offer Performance Gains?

Caching Rujukan Kaedah dalam Java 8

Java 8 memperkenalkan rujukan kaedah, yang menyediakan sintaks ringkas untuk merujuk kaedah dan pembina contoh. Walau bagaimanapun, terdapat kebimbangan mengenai sama ada caching rujukan ini bermanfaat. Untuk memahami topik ini, adalah penting untuk membezakan antara rujukan kaedah caching untuk pelaksanaan kerap tapak panggilan yang sama dan cachingnya untuk pelbagai kegunaan rujukan kaedah oleh tapak panggilan yang berbeza.

Caching Rujukan Kaedah untuk Tapak Panggilan yang Sama

Pertimbangkan kod berikut di mana Foo.func() dipanggil berulang kali melalui doSomethingWithAFunc():

class Foo {

   Y func(X x) {...} 

   void doSomethingWithAFunc(Function<X,Y> f){...}

   void hotFunction(){
        doSomethingWithAFunc(this::func);
   }

}

Caching this::func kononnya akan menghapuskan penciptaan kejadian kelas tanpa nama baharu setiap kali hotFunction() dilaksanakan. Walau bagaimanapun, JVM sudah pun mengoptimumkan senario ini dengan menggunakan semula tika tapak panggilan yang dibuat semasa seruan pertama lambda. Caching rujukan kaedah dalam kes ini adalah berlebihan.

Caching Rujukan Kaedah untuk Tapak Panggilan Berbeza

Sebaliknya, pertimbangkan contoh berikut:

Runnable r1 = System::gc;
Runnable r2 = System::gc;

Di sini, dua tapak panggilan berbeza menghasilkan rujukan kaedah kepada kaedah sasaran yang sama System.gc() dalam java.lang.System. JVM dibenarkan untuk berkongsi satu contoh lambda di antara mereka, tetapi pelaksanaan semasa dalam Java 8 tidak berbuat demikian. Ini disebabkan oleh faedah prestasi yang tidak menentu dalam mengekalkan cache kejadian lambda.

Amalan Terbaik

Memandangkan pertimbangan ini, secara amnya tidak disyorkan untuk menggunakan rujukan kaedah cache melainkan terdapat adalah kebimbangan prestasi khusus yang telah dikenal pasti melalui pengukuran. Caching boleh berpotensi mengubah tingkah laku pelaksanaan program, dan ia hanya perlu dipertimbangkan dalam kes berikut:

  • Apabila terdapat banyak tapak panggilan merujuk kaedah yang sama
  • Apabila lambda dicipta dalam pembina atau permulaan kelas dan:

    • Akan dipanggil serentak oleh berbilang urutan
    • Mengalami penalti prestasi semasa seruan awal

Atas ialah kandungan terperinci Adakah Caching Rujukan Kaedah dalam Java 8 Menawarkan Keuntungan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn