class Laporan {
    private final String judul;

    public Laporan(String judul) {
        this.judul = judul;
        System.out.println("[cipta] Laporan " + judul + " disiapkan");
    }

    public void cetak() {
        System.out.println("[pakai] Laporan " + judul + " dicetak");
    }
}

public class LingkupSiklus {
    static void buatLaporanSementara() {
        Laporan laporan = new Laporan("Penjualan");
        laporan.cetak();
        // Variabel laporan berakhir di sini. Setelah method kembali,
        // tidak ada lagi referensi yang menunjuk objek tersebut.
    }

    public static void main(String[] args) {
        buatLaporanSementara();
        System.out.println("Method selesai; objek laporan tidak lagi terjangkau");

        // Saran kepada JVM untuk menjalankan pemungutan sekarang.
        // JVM bebas mengabaikannya; bukan perintah yang mengikat.
        System.gc();
        System.out.println("System.gc() hanyalah saran; program tetap berjalan");
    }
}
