0Pricing
Ruby Academy · Pelajaran

Optimasi Memori

Kurangi alokasi.

Optimasi Memori adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.

Mengapa Memori Penting

Setiap objek yang dibuat Ruby menggunakan memori dan menambah pekerjaan pengumpulan sampah. Alokasi yang lebih sedikit berarti program yang lebih cepat dan lebih hemat.

  • GC berhenti sejenak untuk mengambil kembali objek
  • Laju alokasi yang tinggi memicu lebih banyak eksekusi GC
  • Mengurangi alokasi sering kali memberikan peningkatan terbesar
before = GC.stat(:total_allocated_objects)
100.times { 'new string' + '!' }
after = GC.stat(:total_allocated_objects)
puts "Allocated: #{after - before} objects"

Menghitung Alokasi

GC.stat menyediakan penghitung alokasi yang dapat Anda bandingkan di sekitar suatu blok.

  • :total_allocated_objects terus bertambah
  • Hitung selisih sebelum dan sesudah untuk mengukur suatu bagian
def allocations
  before = GC.stat(:total_allocated_objects)
  yield
  GC.stat(:total_allocated_objects) - before
end

puts allocations { Array.new(1000) { |i| i.to_s } }

Literal Teks yang Dibekukan

Setiap literal teks yang berulang mengalokasikan objek baru. Membekukan literal tersebut memungkinkan Ruby menggunakan kembali satu instans yang tidak dapat diubah.

  • Tambahkan komentar khusus di bagian atas berkas
  • Atau panggil .freeze pada setiap literal
# frozen_string_literal: true

s1 = 'hello'
s2 = 'hello'
puts s1.equal?(s2)

Hindari Alokasi dalam Perulangan

Membuat objek di dalam perulangan intensif memperbanyak alokasi. Pindahkan konstanta ke luar.

  • Buat ekspresi reguler, larik, dan teks sekali saja
  • Gunakan kembali semuanya di setiap putaran
PATTERN = /\d+/

def count_numbers(lines)
  lines.count { |line| line.match?(PATTERN) }
end

puts count_numbers(['a1', 'bb', 'c3'])

Metode Pengubah (tanda seru)

Metode tanpa tanda seru mengembalikan objek baru; metode bertanda seru mengubah objek secara langsung sehingga menghemat alokasi.

  • map!, gsub!, sort!
  • Gunakan hanya jika mengubah objek asli aman dilakukan
arr = [3, 1, 2]
arr.sort!
puts arr.inspect

s = 'hello world'
s.upcase!
puts s

Simbol dibandingkan Teks sebagai Kunci

Simbol disimpan secara internal: simbol yang sama merupakan satu objek bersama. Gunakan simbol untuk kunci hash.

  • Kunci teks mengalokasikan teks baru setiap kali
  • Simbol menghemat memori dalam pencarian berulang
puts :name.equal?(:name)
puts 'name'.equal?('name')

Pencacah Tertunda

Merangkai map dan select membuat larik perantara. lazy memproses elemen satu per satu.

  • Tidak ada koleksi perantara yang dialokasikan
  • Sangat cocok untuk urutan besar atau tak terbatas
result = (1..Float::INFINITY).lazy
  .select { |n| n.even? }
  .map { |n| n * n }
  .first(5)
puts result.inspect

Alirkan, Jangan Muat Sekaligus

Membaca seluruh berkas ke dalam memori adalah pemborosan. Alirkan berkas baris demi baris.

  • each_line memproses satu baris setiap kali
  • Memori tetap, terlepas dari ukuran berkas
text = "line1\nline2\nline3"
text.each_line do |line|
  puts line.strip.upcase
end

Penggabungan Teks

Membangun teks dengan + dalam perulangan mengalokasikan teks baru setiap kali. Gunakan << untuk menambahkan secara langsung.

  • + membuat objek baru
  • << mengubah penyangga yang sudah ada
buffer = String.new
5.times { |i| buffer << "item#{i} " }
puts buffer

Pengumpulan dan Penggunaan Kembali Objek

Gunakan kembali objek yang berbiaya tinggi alih-alih membuatnya lagi.

  • Simpan konfigurasi yang telah diurai atau ekspresi reguler yang telah dikompilasi
  • Gunakan konstanta atau nilai yang telah dimemoisasi
def config
  @config ||= { host: 'localhost', port: 4567 }
end

puts config.equal?(config)

Memicu GC untuk Mendapatkan Wawasan

Anda dapat memeriksa perilaku GC untuk memastikan adanya peningkatan.

  • GC.stat(:count) menunjukkan berapa kali GC berjalan
  • Lebih sedikit proses setelah optimasi merupakan pertanda baik
start = GC.stat(:count)
50_000.times { |i| [i] }
puts "GC runs: #{GC.stat(:count) - start}"

Pemeriksaan Singkat

Uji pengetahuan Anda tentang pengoptimalan memori.

Rangkuman

Anda telah mempelajari cara mengoptimalkan memori:

  • Hitung alokasi dengan GC.stat
  • Bekukan literal teks dan gunakan kembali objek
  • Utamakan metode bertanda seru dan << untuk menghindari objek baru
  • Gunakan simbol untuk kunci dan pencacah tertunda untuk alur pemrosesan
  • Alirkan data besar alih-alih memuat semuanya

Selanjutnya, Anda akan menangani hambatan kinerja yang umum.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Optimasi Memori” gratis?

Ya — teks lengkap “Optimasi Memori” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Optimasi Memori”?

Kurangi alokasi. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Ruby Academy?

Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Optimasi Memori” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?

Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengukur Performa
  2. Alat Pembuatan Profil
  3. Optimasi Memori
  4. Bottleneck Umum
← Kembali ke Ruby Academy