Rumah  >  Artikel  >  Java  >  Apakah kegunaan kata kunci yang tidak menentu dalam Java

Apakah kegunaan kata kunci yang tidak menentu dalam Java

PHPz
PHPzke hadapan
2023-05-14 18:52:061297semak imbas

1. Peranan tidak menentu

  • boleh memastikan keterlihatan pembolehubah yang dikongsi dalam persekitaran berbilang benang

  • Halang berbilang arahan dengan menambah halangan memori Menyusun semula antara

2. Apakah keterlihatan

Keterlihatan bermakna apabila satu utas mengubah suai pembolehubah yang dikongsi, utas lain boleh melihat dengan serta-merta nilai pengubahsuaian A, keterlihatan pada asasnya disebabkan oleh beberapa aspek

Apakah kegunaan kata kunci yang tidak menentu dalam Java

cache peringkat cpu Dalam CPU, cache peringkat ketiga direka untuk menyelesaikan masalah kecekapan pengkomputeran CPU dan Terdapat a masalah kecekapan IO memori, tetapi ia juga membawa masalah ketekalan cache Dalam kes pelaksanaan berbilang benang, masalah ketekalan cache akan membawa kepada masalah keterlihatan, adalah penting untuk menambah volatile Pembolehubah kongsi yang diubah suai daripada perkataan itu, mesin maya JVM akan menambah arahan pemasangan #kunci secara automatik, dan arahan ini secara automatik akan menambah 总线锁 atau 缓存锁

mengikut model CPU yang berbeza 3. Apakah kunci dan cache Bas kunci

  • Kunci bas mengunci bas bahagian hadapan CPU, yang menyebabkan hanya satu utas berkomunikasi dengan memori pada masa yang sama, sekali gus mengelak masalah keterlihatan

  • Kunci cache ialah pengoptimuman kunci bas Kerana kunci bas menyebabkan kecekapan penggunaan CPU menurun dengan ketara, kunci cache hanya untuk cache peringkat ketiga CPU dikunci, dan kunci cache dilaksanakan menggunakan protokol ketekalan cache MESI

4. Apakah penyusunan semula arahan Susunan data dan perintah pelaksanaan tidak konsisten, yang membawa kepada masalah keterlihatan dalam berbilang -persekitaran berulir. Penyusunan semula arahan pada asasnya adalah cara pengoptimuman prestasi Penyusunan semula arahan datang dari beberapa aspek

    Tahap CPU terus mengoptimumkan
  • untuk meningkatkan penggunaan CPU

    , dan mekanisme pengoptimuman ini akan membawa kepada pelaksanaan CPU di luar pesanan Untuk mengelakkan masalah tersebut, CPU menyediakan arahan penghalang memori boleh memasukkan halangan memori di tempat yang sesuai untuk mengelakkan masalah penyusunan semula arahan CPU MESI协议StoreBuffer

  • Pengkompil sedang dalam proses penyusunan , tanpa mengubah semantik satu utas dan ketepatan program, arahan disusun semula secara munasabah untuk mengoptimumkan prestasi keseluruhan kata kunci
  • ditambahkan pada pembolehubah yang dikongsi, tahap pengkompil tidak akan dicetuskan, dan dalam jvm, ia akan memasukkan arahan penghalang memori untuk mengelakkan masalah penyusunan semula

    volatile

  • Dalam. tambahan kepada kata kunci
, dibangunkan daripada JDK5, JMM menggunakan model A

digunakan untuk menerangkan hubungan keterlihatan berbilang benang, iaitu, terdapat hubungan volatile antara dua operasi, kemudian kedua-dua operasi ini mempunyai hubungan keterlihatan dan tidak perlu mempertimbangkan untuk menambah Happens-BeforeKata kunci memberikan jaminan keterlihatanHappens-Before

Atas ialah kandungan terperinci Apakah kegunaan kata kunci yang tidak menentu dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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