Rumah Java javaTutorial Kerugian data cache Java: Mengapa data tidak dapat diambil dari cache?

Kerugian data cache Java: Mengapa data tidak dapat diambil dari cache?

Apr 19, 2025 pm 02:57 PM
tomcat kehilangan data bekas musim bunga red

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:

  1. Kaedah Statik dan Singleton: Kelas scenarioBuffer menggunakan kaedah statik getBAsset dan Variabel Static assetBuffer , serta kaedah getInstance() . 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.
  2. Suntikan ketergantungan hilang: Mendapatkan contoh scenarioBuffer tidak menggunakan suntikan pergantungan musim bunga, tetapi menggunakan kaedah getInstance() , yang mengurangkan kebolehkerjaan dan kebolehlaksanaan kod.
  3. Kaedah Inisialisasi: Walaupun ia mungkin untuk memulakan cache menggunakan ApplicationRunner , anotasi @PostConstruct atau InitializingBean 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1662
14
Tutorial PHP
1261
29
Tutorial C#
1234
24
Menggunakan DICR/YII2-Google untuk mengintegrasikan API Google di YII2 Menggunakan DICR/YII2-Google untuk mengintegrasikan API Google di YII2 Apr 18, 2025 am 11:54 AM

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

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

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

Cara Membina Laman Web Untuk WordPress Host Cara Membina Laman Web Untuk WordPress Host Apr 20, 2025 am 11:12 AM

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.

Apa yang perlu dilakukan jika cache redis gagal dalam boot musim bunga? Apa yang perlu dilakukan jika cache redis gagal dalam boot musim bunga? Apr 19, 2025 pm 08:03 PM

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

Tajuk: Cara Menggunakan Komposer Untuk Menyelesaikan Masalah Penguncian Teragih Tajuk: Cara Menggunakan Komposer Untuk Menyelesaikan Masalah Penguncian Teragih Apr 18, 2025 am 08:39 AM

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.

Gunakan komposer untuk memudahkan pembangunan projek php: aplikasi praktikal perpustakaan pxniu/kajian Gunakan komposer untuk memudahkan pembangunan projek php: aplikasi praktikal perpustakaan pxniu/kajian Apr 18, 2025 am 11:06 AM

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

Apakah sebab mengapa penyemak imbas tidak bertindak balas selepas pelayan WebSocket mengembalikan 401? Bagaimana menyelesaikannya? Apakah sebab mengapa penyemak imbas tidak bertindak balas selepas pelayan WebSocket mengembalikan 401? Bagaimana menyelesaikannya? Apr 19, 2025 pm 02:21 PM

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

See all articles