MenuBar

Kata Mutiara

"Keberhasilan merupakan tetesan dari jeri-payah perjuangan, luka, pengorbanan dan hal-hal yang mengejutkan. Kegagalan merupakan tetesan dari kemalasan, kebekuan, kelemahan, kehinaan dan kerendahan"

ANIMASI TULISAN BERJALAN

Thursday, January 16, 2025

Analisis Garbage Collection, Memory Leaks, dan Heap Dump

 contoh penggunaan pengelolaan memory management dalam aplikasi kredit/finance, termasuk analisis garbage collection, memory leaks, dan heap dump analysis dengan Eclipse MAT.


Studi Kasus: Simulasi Aplikasi Kredit

Skenario

  • Sebuah aplikasi kredit memiliki modul untuk memproses pengajuan pinjaman pelanggan.
  • Dalam proses tersebut, beberapa data sementara (temporary data) disimpan dalam memori.
  • Jika tidak dikelola dengan baik, dapat terjadi memory leaks dan konsumsi memori yang tinggi, yang menyebabkan OutOfMemoryError.

1. Contoh Kode dengan Masalah Memory Leaks

Kode Bermasalah:

java

import java.util.HashMap;
import java.util.Map;

public class CreditApplicationService {
    private static Map<Long, String> customerCache = new HashMap<>(); // Cache untuk data pelanggan

    public void processApplication(long customerId, String customerData) {
        // Simpan data pelanggan dalam cache (tapi tidak pernah dihapus)
        customerCache.put(customerId, customerData);
        System.out.println("Processed application for customer: " + customerId);
    }

    public static void main(String[] args) {
        CreditApplicationService service = new CreditApplicationService();

        for (long i = 1; i <= 100000; i++) {
            service.processApplication(i, "CustomerData" + i);
        }

        System.out.println("Processing completed.");
    }
}Masalah:
  • Memory Leak: Data pelanggan disimpan di cache (customerCache) dan tidak pernah dihapus.
  • Ketika aplikasi berjalan lama, data cache akan terus bertambah dan tidak pernah dirilis, menyebabkan OutOfMemoryError.

2. Solusi: Gunakan Weak References atau Eviction Policies

Gunakan WeakHashMap untuk memungkinkan garbage collection membersihkan data yang tidak lagi dirujuk.

Kode yang Diperbaiki:

java

import java.util.Map;
import java.util.WeakHashMap;

public class CreditApplicationService {
    private static Map<Long, String> customerCache = new WeakHashMap<>();

    public void processApplication(long customerId, String customerData) {
        customerCache.put(customerId, customerData); // Data dapat dihapus oleh garbage collector
        System.out.println("Processed application for customer: " + customerId);
    }

    public static void main(String[] args) {
        CreditApplicationService service = new CreditApplicationService();

        for (long i = 1; i <= 100000; i++) {
            service.processApplication(i, "CustomerData" + i);
        }

        System.out.println("Processing completed.");
    }
}

Keuntungan:

  • WeakHashMap memungkinkan data dihapus oleh garbage collector jika tidak ada referensi kuat ke kunci.

3. Analisis Garbage Collection

Jenis-Jenis Garbage Collector di Java:

  • Serial GC: Cocok untuk aplikasi kecil.
  • Parallel GC: Untuk throughput tinggi.
  • G1 GC: Untuk aplikasi dengan kebutuhan low-latency.
  • ZGC: Untuk meminimalkan jeda.

Menambahkan Flag JVM untuk Debugging GC:

Tambahkan flag berikut saat menjalankan aplikasi untuk memantau garbage collection:

bash

java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xlog:gc* -jar yourapp.jar

Output Log GC:

mathematica

[2025-01-15T10:23:45.123+0000][GC (Allocation Failure) [PSYoungGen: 2048K->512K(6144K)] 4096K->2560K(8192K), 0.0054321 secs]

4. Analisis Heap Dump dengan Eclipse MAT

Langkah untuk Menganalisis Heap Dump:

  1. Tambahkan flag berikut saat menjalankan aplikasi:

    bash
    java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof -jar yourapp.jar
    • HeapDumpOnOutOfMemoryError: Memicu pembuatan heap dump saat terjadi OutOfMemoryError.
    • HeapDumpPath: Lokasi file heap dump.
  2. Jalankan aplikasi dan biarkan hingga error terjadi (misalnya, OutOfMemoryError).

  3. Buka file .hprof menggunakan Eclipse Memory Analyzer Tool (MAT).


Contoh Analisis Heap Dump

Langkah di Eclipse MAT:

  1. Buka file heap dump di MAT.
  2. Gunakan fitur "Leak Suspects Report":
    • Identifikasi objek yang terus berada dalam memori.
    • Cari tahu referensi yang membuat objek tersebut tidak dihapus.
  3. Analisis Dominators Tree:
    • Lihat objek yang memegang referensi terbesar dalam memori.

Contoh Output Analisis:

  • Suspected LeakcustomerCache memegang referensi besar karena data tidak pernah dihapus.
  • Solusi yang Direkomendasikan: Gunakan struktur data seperti WeakHashMap atau tambahkan kebijakan penghapusan data lama.

5. Simulasi OutOfMemoryError

Untuk mensimulasikan OutOfMemoryError, tambahkan batas heap kecil:

bash

java -Xmx16m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof -jar yourapp.jar

Hasil Output:

arduino

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Dumping heap to heapdump.hprof ...

Kesimpulan

  1. Memory Management:

    • Gunakan WeakHashMap untuk cache atau tambahkan mekanisme pembersihan.
    • Monitor penggunaan memori dengan flag JVM dan analisis log garbage collection.
  2. Heap Dump Analysis:

    • Gunakan Eclipse MAT untuk menemukan sumber memory leaks.
    • Fokus pada referensi objek besar yang tidak diperlukan lagi.

Dengan teknik ini, Anda dapat mengelola memori dengan efisien di aplikasi kredit/finance dan mencegah masalah seperti OutOfMemoryError.

No comments:

Post a Comment

iklan

iklan