Kerugian data cache Java: Mengapa data tidak dapat diambil dari cache?
Masalah kehilangan data cache Java: Diagnosis dan penyelesaian
Dalam aplikasi Java, caching memori adalah strategi utama untuk meningkatkan prestasi. Walau bagaimanapun, kehilangan data cache adalah masalah biasa. Artikel ini akan menjalankan analisis kes untuk meneroka penyebab utama data cache Java secara mendalam dan menyediakan penyelesaian pengoptimuman yang berkesan.
Latar belakang kes:
Projek menggunakan kelas yang dipanggil scenarioBuffer
untuk cache kira -kira 160,000 data asset
ke dalam hashmap. Kelas scenarioBuffer
menggunakan anotasi @Component
dan menyediakan kaedah statik getBAsset
untuk pemerolehan data. Apabila aplikasi bermula, scenarioBuffer
memulakan cache melalui antara muka ApplicationRunner
. Walau bagaimanapun, semasa larian, kaedah getBAsset
sering mengembalikan nilai null. Apa yang lebih membingungkan ialah memori pelayan dalam keperluan mendesak (hanya 100MB memori yang ada ditinggalkan, cache mengambil 3GB, dan jumlah memori adalah 8GB). Selepas memulakan semula pelayan dan membersihkan cache, masalahnya diselesaikan buat sementara waktu.
Analisis punca utama masalah:
Walaupun memperuntukkan kira -kira 3GB memori untuk Tomcat, memori pelayan yang tidak mencukupi tetap menjadi masalah utama. Apabila ingatan tidak mencukupi, JVM akan mencetuskan pengumpulan sampah dan juga memaksa penutupan untuk melepaskan memori, menyebabkan data cache dibersihkan.
Kelemahan Kod:
Kod asal mempunyai masalah berikut:
- Kaedah Statik dan Singleton: Kelas
scenarioBuffer
menggunakan kaedah statikgetBAsset
dan Variabel StaticassetBuffer
, serta kaedahgetInstance()
. Dalam kacang yang diuruskan musim bunga, ini tidak perlu. Bekas musim bunga sendiri menguruskan singleton kacang, kaedah statik dan pembolehubah meningkatkan kerumitan kod dan sukar untuk ujian unit. - Suntikan ketergantungan hilang: Mendapatkan contoh
scenarioBuffer
tidak menggunakan suntikan pergantungan musim bunga, tetapi menggunakan kaedahgetInstance()
, yang mengurangkan kebolehkerjaan dan kebolehlaksanaan kod. - Kaedah Inisialisasi: Walaupun ia mungkin untuk memulakan cache menggunakan
ApplicationRunner
, anotasi@PostConstruct
atauInitializingBean
adalah lebih jelas dan lebih mudah difahami.
Penyelesaian Pengoptimuman:
Adalah disyorkan untuk menggunakan suntikan pergantungan Spring dan @PostConstruct
Kod Pengoptimuman Anotasi:
Kelas scenarioBuffer
yang diubahsuai:
@Component SenarioBuffer kelas awam melaksanakan IActionListener { @Autowired IASSetService AssetService Private; peta peribadi <string list> > AssetBuffer = hashMap baru (); @PostConstruct public void init () { Senarai<asset> AssetList = AssetService.List (); AssetBuffer.put ("Key", AssetList); // di sini anda perlu mengubah suai kunci mengikut keadaan sebenar } Senarai Awam<asset> getBasset (String GroupID) { kembali AssetBuffer.get (GroupID); } }</asset></asset></string>
Di dalam kelas yang perlu menggunakan cache, suntikan contoh scenarioBuffer
melalui @Autowired
:
@Service kelas awam xxxservice { @Autowired senariobuffer swasta senariobuffer; public void xxx () { Senarai<asset> aset = senarioBuffer.getBasset ("xxx"); // di sini anda perlu mengubah suai kumpulan ini mengikut keadaan sebenar // ... } }</asset>
Pengubahsuaian ini menjadikan kod lebih ringkas, mudah dikekalkan dan menguji, dan mengelakkan masalah yang disebabkan oleh kaedah dan pembolehubah statik.
Di samping itu, anda perlu memberi perhatian kepada penggunaan memori pelayan. Jika memori sering tidak mencukupi, pertimbangkan untuk meningkatkan memori pelayan atau mengoptimumkan program untuk mengurangkan penggunaan memori. Walaupun Redis tidak dipertimbangkan buat masa ini dalam kes itu, dalam jangka masa panjang, menggunakan cache yang diedarkan seperti REDIS dapat mengurangkan tekanan memori dengan berkesan dan meningkatkan prestasi.
Atas ialah kandungan terperinci Kerugian data cache Java: Mengapa data tidak dapat diambil dari cache?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











VProcesserAzrabotKiveB-disengajakan, мнепришосоаookaнноаяадачейтераце hadapan LeavallysumballanceFriablanceFaumdoptomification, čtookazalovnetakprosto, Kakaožidal.posenesko

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...

Untuk membina laman web menggunakan hos WordPress, anda perlu: pilih penyedia hosting yang boleh dipercayai. Beli nama domain. Sediakan akaun hosting WordPress. Pilih topik. Tambah halaman dan artikel. Pasang pemalam. Sesuaikan laman web anda. Menerbitkan laman web anda.

Dalam springboot, gunakan redis untuk objek OAuth2Authorization Cache OAuth2. Dalam aplikasi Springboot, gunakan SpringsecurityoAuth2Authorizationsererver ...

Ringkasan Penerangan: Penguncian yang diedarkan adalah alat utama untuk memastikan konsistensi data apabila membangunkan aplikasi konvensional yang tinggi. Artikel ini akan bermula dari kes praktikal dan memperkenalkan secara terperinci bagaimana menggunakan komposer untuk memasang dan menggunakan perpustakaan dino-ma/diedarkan untuk menyelesaikan masalah kunci yang diedarkan dan memastikan keselamatan dan kecekapan sistem.

Apabila membangunkan projek PHP, kita sering memenuhi keperluan seperti operasi pangkalan data, pengurusan urus niaga, dan suntikan pergantungan. Sekiranya ditulis secara manual, operasi ini bukan sahaja memakan masa dan intensif buruh, tetapi juga terdedah kepada kesilapan. Baru -baru ini, saya menghadapi masalah yang sama dalam projek saya, dan mengendalikan operasi ini menjadi sangat kompleks dan sukar untuk dijaga. Nasib baik, saya dapati perpustakaan komposer yang dipanggil PXNIU/Kajian, yang sangat memudahkan proses pembangunan saya. Komposer dapat dipelajari melalui alamat berikut: Alamat Pembelajaran

Kaedah tidak responsif penyemak imbas selepas pelayan WebSocket mengembalikan 401. Apabila menggunakan Netty untuk membangunkan pelayan WebSocket, anda sering menghadapi keperluan untuk mengesahkan token. � ...

JDBC ...
