Rumah >Java >javaTutorial >Mari bercakap tentang Projek Java Valhalla

Mari bercakap tentang Projek Java Valhalla

WBOY
WBOYke hadapan
2022-09-07 14:07:072318semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang java terutamanya memperkenalkan pengenalan Projek Java Valhalla dan pengenalan terperinci mengenai tema tersebut kepada semua orang.

Mari bercakap tentang Projek Java Valhalla

Pembelajaran yang disyorkan: "tutorial video java"

Dalam artikel ini, kami akan memperkenalkan projek Valhalla - sebab sejarahnya , keadaan semasa pembangunan, dan perkara yang akan dibawa kepada pembangun Java setiap hari selepas dikeluarkan.

Motivasi dan sebab untuk projek Valhalla

Arkitek bahasa Java Oracle Brian Goetz berkata dalam ucapannya bahawa salah satu motivasi utama untuk projek Valhalla adalah keinginan untuk menyesuaikan bahasa Java dan masa jalan ke perkakasan moden. Apabila bahasa Java dilahirkan (pada masa penulisan kira-kira 25 tahun yang lalu), akses kepada memori dan operasi aritmetik kos hampir sama.

Hari ini, keadaan ini telah berubah, dan operasi pengambilan memori adalah 200 hingga 1000 kali lebih mahal daripada operasi aritmetik. Dari segi reka bentuk bahasa, ini bermakna bahawa operasi tidak langsung yang menghasilkan pengekstrakan penunjuk boleh menjejaskan prestasi keseluruhan.

Memandangkan kebanyakan struktur data Java dalam aplikasi adalah objek, kita boleh menganggap Java sebagai bahasa intensif penunjuk (walaupun biasanya kita tidak melihat atau memanipulasinya secara langsung) . Pelaksanaan objek berasaskan penunjuk ini digunakan untuk membolehkan pengenalpastian objek, yang dengan sendirinya digunakan untuk ciri bahasa seperti polimorfisme, kebolehubahan dan penguncian. Secara lalai, sifat ini digunakan pada setiap objek tanpa mengira sama ada ia sebenarnya diperlukan.

Mengikuti rantaian identiti yang membawa kepada penunjuk dan rantaian penunjuk yang membawa kepada pengasingan, pengasingan mempunyai kelemahan prestasi dan kesimpulan logiknya adalah untuk mengalih keluar struktur data yang tidak memerlukannya. Di sinilah jenis nilai dimainkan.

Jenis Nilai Jenis Nilai

Konsep jenis nilai adalah untuk mewakili pengagregatan data tulen. Ini mengalih keluar fungsi daripada objek biasa. Jadi kami mempunyai data tulen, tiada identiti. Sudah tentu, ini bermakna kita juga kehilangan fungsi yang boleh dicapai menggunakan pengenalan objek. Oleh itu, perbandingan kesaksamaan hanya boleh dibuat berdasarkan status. Oleh itu, kita tidak boleh menggunakan polimorfisme perwakilan, kita juga tidak boleh menggunakan objek tidak berubah atau tidak boleh dibatalkan.

Memandangkan kami tidak lagi mempunyai pengecam objek, kami boleh meninggalkan penunjuk dan menukar susun atur memori umum jenis nilai dan bukannya objek. Mari kita bandingkan susun atur memori antara titik kelas dan titik jenis nilai yang sepadan.

Kod dan susun atur memori yang sepadan bagi kelas Point biasa ialah:

final class Point {
  final int x;
  final int y;
}

Sebaliknya , nilai Kod dan susun atur memori yang sepadan untuk jenis Point ialah:

value class Point {
  int x;
  int y
}

Ini membolehkan JVM meratakan jenis nilai ke dalam tatasusunan dan objek, sebagai serta jenis nilai lain.

Dalam imej di bawah, kami menunjukkan kesan negatif tidak langsung apabila menggunakan kelas Point dalam tatasusunan:

Di sisi lain tangan, Di sini kita melihat struktur memori yang sepadan untuk jenis nilai Point[]:

Ia juga membolehkan JVM menghantar jenis nilai pada tindanan tanpa perlu memperuntukkannya pada timbunan itu. Akhirnya, ini bermakna kita mendapat pengagregatan data dengan gelagat masa jalan yang serupa dengan primitif Java seperti int atau float.

Tetapi tidak seperti primitif, jenis nilai boleh mempunyai kaedah dan medan. Kami juga boleh melaksanakan antara muka dan menggunakannya sebagai jenis generik.

Oleh itu, kita boleh melihat jenis nilai dari dua perspektif berbeza:

  • Objek Lebih Pantas
  • Primitif yang ditentukan pengguna

Sebagai aising tambahan pada kek, kita boleh menggunakan jenis nilai sebagai jenis generik tanpa tinju. Ini membawa kami terus ke satu lagi projek besar yang mempunyai ciri Valhalla: generik khusus.

Generik Khusus

Apabila kami ingin menyamaratakan primitif bahasa, pada masa ini kami menggunakan jenis berkotak, seperti perwakilan integer Integer atau perwakilan titik terapung Float. Tinju ini mencipta lapisan amaran tambahan, dengan itu mengalahkan tujuan menggunakan primitif untuk meningkatkan prestasi di tempat pertama.

Oleh itu, kami melihat banyak pengkhususan untuk jenis primitif seperti IntStream<T> atau ToIntFunction<T> dalam rangka kerja dan perpustakaan sedia ada. Ini dilakukan untuk mengekalkan peningkatan prestasi penggunaan primitif.

Oleh itu, pengkhususan generik adalah untuk menghapuskan keperluan untuk "godam" ini. Sebaliknya, bahasa Java berusaha untuk membolehkan jenis generik pada asasnya untuk segala-galanya: rujukan objek, primitif, jenis nilai, bahkan mungkin void.

Kesimpulan

Kami mempunyai pemahaman awal tentang perubahan yang akan dibawa oleh projek Valhalla kepada bahasa Jawa. Dua daripada matlamat utama adalah untuk meningkatkan prestasi dan mengurangkan abstraksi bocor.

Peningkatan prestasi ditangani dengan meratakan graf objek dan mengalih keluar arahan. Ini menghasilkan susun atur memori yang lebih cekap dan lebih sedikit peruntukan serta kutipan sampah.

Apabila digunakan sebagai jenis generik, primitif dan objek mempunyai gelagat yang lebih serupa, iaitu abstraksi yang lebih baik.

Pembelajaran yang disyorkan: "tutorial video java"

Atas ialah kandungan terperinci Mari bercakap tentang Projek Java Valhalla. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam