1. Tujuan dari kita melakukan ini:
1. Efisiensi (Paling Penting)
2. Keterbacaan, mudah dipelihara di tahap selanjutnya. (Juga penting)
2. Persyaratan untuk Optimalisasi Kode:
1. Kurangi volume kode.
2. Tingkatkan efisiensi kode yang berjalan.
3. Optimalisasi kode yang biasa digunakan:
1. Cobalah untuk menggunakan kembali objek:
Terutama penggunaan kembali objek string. Penyambungan string yang paling umum digunakan:
Saat bertemu sering menghapus string. Ingatlah untuk menggunakan StringBuilder/StringBuffer
Misalnya:
Daftar ArrayList <String>; // Simpan Inisialisasi. StringBuilder Builder = New StringBuilder ();
Alasan: Mesin virtual Java tidak hanya perlu menghabiskan waktu menghasilkan objek, tetapi juga perlu menghabiskan waktu pemrosesan dan mendaur ulang objek.
2. Gunakan variabel lokal jika memungkinkan:
Variabel lokal dibuat di tumpukan, dan dibuat dengan cepat dan menghilang secara otomatis setelah digunakan, tanpa pengumpulan sampah tambahan.
Variabel statis, variabel instan, dll. Dibuat di tumpukan, dan kecepatan penciptaannya lambat, dan juga bergantung pada mekanisme pengumpulan sampah Java untuk diproses.
3. Tutup aliran dalam waktu:
Dalam pengembangan program Java, setelah operasi I/O dan basis data selesai, Anda harus ingat untuk menutup aliran.
Penyebab: Tidak menutup aliran dapat menyebabkan overhead yang besar pada sistem dan bahkan mungkin memiliki konsekuensi serius untuk data.
4. Gunakan pemuatan malas
Lazy Loading: Buat objek ini hanya saat digunakan.
Misalnya:
Prefix String = "Gebi";
Ganti dengan:
if ("laowang" .Equals (name)) {string prefix = "gebi";5. Hindari Menggunakan Coba ... Tangkap di Loop, Gunakan Coba ... Tangkap di luar loop
6. Coba ... Tangkap seharusnya tidak terlalu besar.
Jangan letakkan semua kode yang tidak berguna, yaitu, pengecualian tidak akan dilemparkan ke dalam cobalah ... tangkap blok, dan mengurangi ukuran blok cobalah ... Tangkap kode.
Pastikan keterbacaan, pemeliharaan, dan ketahanan kode.
7. Cobalah untuk menghindari membuat referensi ke objek di dalam loop.
Terutama ketika volume sirkulasi besar.
while (i <1000) {objek objek = objek baru ();Disarankan untuk memodifikasinya menjadi:
Objek objek = null; while (i <1000) {objek = objek baru ();Setiap kali objek baru () baru, referensi objek objek menunjuk ke objek objek.
Ketika ada banyak loop, misalnya, tipe pertama, JVM akan membuat 1.000 referensi ke objek, sedangkan tipe kedua hanya memiliki satu referensi objek objek dalam memori. Ini sangat menghemat ruang memori.
8. Jangan gunakan variabel statis sesuka hati.
Ketika suatu objek dirujuk oleh variabel yang dinyatakan statis, kolektor sampah Java tidak akan membersihkan memori tumpukan yang ditempati oleh objek.
Memori tumpukan yang ditempati oleh variabel statis tidak dilepaskan sampai program di mana variabel berada. Artinya, siklus hidup variabel statis = siklus hidup kelas.
9. Jangan membuat beberapa objek yang tidak digunakan, dan jangan mengimpor beberapa kelas yang tidak digunakan.
10. Gunakan stream I/O buffered:
Streaming I/O buffer dapat sangat meningkatkan efisiensi I/O. BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream.
11. Konversi data pembungkus menjadi string untuk digunakan: tostring
Integer I = 1;
Konversi data pembungkus menjadi peringkat kecepatan metode string:
i.tostring> string.Valueof (i)> "" + i
12. Efisiensi Traversal Map: Entryset> Keyset
// entryset () untuk (entri <string, string> entri: map.entryset ()) {string key = entry.getKey (); : " + value);} // Bandingkan naik dan turun // keyset () untuk (tombol string: peta.keyset ()) {string value = map.get (key); System.out.println (key +": " + nilai);}13. Tentang koleksi Traversal of Iterator dan Foreach ().
Pengantar algoritma mengatakan: Algoritma dimaksudkan untuk meningkatkan efisiensi ruang dan efisiensi waktu. Tetapi seringkali waktu dan ruang tidak bisa hidup berdampingan.
Efisiensi Waktu: Iterator> Foreach ()
Keterbacaan kode: foreach ()> iterator
// Set Iterator <Entri <String, String >> Entryset = MAP.ENTRYSET (); String> iter.Next ();
kontras:
// foreach () untuk (entri <string, string> entri: map.entryset ()) {string key = entry.getKey (); : " + nilai);}Secara pribadi, saya percaya bahwa disarankan untuk menggunakan Iterator untuk melintasi pengumpulan saat memproses data besar.
Namun, untuk pemrosesan data kecil, foreach () masih digunakan untuk keterbacaan dan perawatan di kemudian hari.
Keduanya harus dikuasai saat menggunakannya dalam kombinasi.