Lompat ke konten Lompat ke sidebar Lompat ke footer

Membuat JVM Shutdown Hook Java dan Fungsinya

Shotdown hook adalah konstruksi khusus yang memungkinkan pengembang untuk memasukkan beberapa bagian kode program untuk dieksekusi ketika JVM dimatikan. Kemampuan ini berguna pada kondisi dimana membutuhkan operasi pembersihan khusus ketika JVM akan dimatikan pada bahasa pemrograman Java.


Sebelum mempelajari materi tentang Membuat JVM Shutdown Hook Java dan Fungsinya, terlebih dahulu pelajari materi tentang: Sistem Penamaan Bahasa Pemrograman Java, Java Virtual Machine dan Fungsinya, dan Membuat JVM Stack Area Java dan Fungsinya.

Penanganan ini membutuhkan beberapa pemahaman umum, seperti memastikan pemanggilan perintah  (pemanggilan System.exit(0)) tidak akan berfungsi apabila terjadi situasi dimana virtual machine sudah mati karena alasan lain (seperti perintah matikan yang berasal dari OS), atau disebabkan oleh masalah sumber daya (kehabisan memori). Shutdown hook memberikan penyelesaian masalah dengan mudah, dengan cara menyediakan blok kode arbitrari dimana kode tersebut semuanya akan dipanggil oleh JVM ketika JVM akan dimatikan.

Hal yang harus dilakukan untuk mengaktifkan shutdown hook adalah membuat class extends ke java.lang.Thread, dan membuat logika yang berisi perintah shotdown JVM di dalam method public void run(). Setelah itu, daftarkan register instance dari class shutdown hook ke JVM dengan cara memanggil method Runtime.retRuntime().addShutdownHook(Thread). Jika diperlukan penghapusan register shutdown hook sebelumnya, maka class Runtime menyediakan method removeShotdownHook(Thread).

Contoh:

/* JVM shutdown hook pada bahasa pemrograman Java */

public class ShutDownHook

{

 

public static void main(String[] args)

{

 

Runtime.getRuntime().addShutdownHook(new Thread(){

public void run(){

System.out.println("Shutdown Hook dijalankan!");}

});

System.out.println("Aplikasi dimatikan ...");

 

}

}

Output:
Aplikasi dimatikan ...
Shutdown Hook dijalankan!

Contoh:

/* JVM Shotdown Hook pada bahasa pemrograman Java */

class ThreadChild extends Thread {

 

public void run() {

System.out.println("Membersihkan kode program");

System.out.println("Melakukan shutdown hook");

}

 

}

 

 

class Demo {

 

public static void main(String[] args) {

Runtime current = Runtime.getRuntime();

current.addShutdownHook(new ThreadChild());

for(int i = 1; i <= 10; i++)

System.out.println("2 X " + i + " = " + 2 * i);

}

 

}

Output:
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
2 X 10 = 20
Membersihkan kode program
Melakukan shutdown hook

Ketika kode program diatas dijalankan, maka shutdown hook akan dipanggil oleh JVM ketika perintah pada main method telah dijalankan atau selesai dieksekusi.

Baca Juga:

Beberapa hal yang perlu diperhatikan dalam penggunaan perintah shutdown hook:

satu, Dalam beberapa kondisi shutdown hook mungkin tidak dapat dieksekusi.
Satu hal yang perlu diingat adalah perintah shutdown hook tidak selamanya dapat dijalankan dalam program. Jika JVM mengalami kerusakan, maka kemungkinan kerusakan atau error tersebut tidak akan memberikan kesempatan untuk mengeksekusi perintah shutdown hook. Juga, jika O/S memberikan SIGKILL (googling saja!), maka aplikasi harus dimatikan lebih awal tanpa melakukan aktifitas pembersihan memori. Hal lain yang mungkin terjadi apabila JVM ingin dimatikan tanpa menggunakan perintah shutdown hook adalah menggunakan method Runime.halt().

Shutdown hook hanya akan dipanggil apabila aplikasi dimatikan secara normal atau apabila semua thread telah selesai dijalankan atau ketika memanggil perintah System.exit(0). Dan juga, JVM akan dimatikan bila disebabkan oleh kondisi eksternal seperti permintaan user untuk mematikan, ada sinyal SIGTERM dari O/S (atau perintah mematikan secara normal), atau operating system berhenti beroperasi.

dua, Saat perintah shutdown hook dipanggil, maka shutdown hook dapat berhenti beroperasi tanpa menyelesaikan eksekusi perintahnya.
Hal ini sama seperti kondisi khusus yang telah dijelaskan sebelumnya. Meskipun shutdown hook telah menjalankan perintahnya, bukan tidak mungkin proses eksekusi shutdown hook dapat terhenti ditengah jalan seperti ketika kondisi operating system yang mati atau berhenti beroperasi pada saat pengoperasian. Untuk kasus ini, O/S akan menunggu proses dimatikan untuk mengetahui jumlah waktu spesifik ketika SIGTERM dijalankan. Namun, jika proses belum dimatikan sesuai batas waktu yang diberikan, maka O/S akan mematikan proses secara paksa dengan mengeluarkan perintah SIGTERM (atau counterparts pada Windows). Kondisi ini mungkin saja terjadi jika perintah shutdown hook mati ketika perintah baru setengah jalan untuk dieksekusi.

Penting untuk memerhatikan bahwa perintah shutdown hook harus dibuat dengan hati-hati, memastikan agar perintah shutdown hook dapat dieksekusi secara cepat dan tidak menyebabkan situasi deadlock. Dan juga, JavaDoc khususnya mengingatkan bahwa perintah tersebut seharusnya tidak dijalankan pada bagian program yang membutuhkan proses kalkulasi panjang atau saat proses menunggu input I/O.

tiga, Shutdown hook dapat memiliki lebih dari satu perintah dalam proses pengoperasiannya, namun tidak dapat menjamin apakah semua perintah tersebut dapat dieksekusi semua.
Method addShutdownHook dapat di-register lebih dari satu method pada aplikasi. Hanya saja tidak bisa dijamin apakah semua perintah tersebut dapat dieksekusi oleh JVM. JVM hanya bisa mengeksekusi shutdown hook dalam perintah arbiter. Lebih dari itu, JVM mungkin akan mengeksekusi semua perintah shutdown hook secara bersamaan.

empat, Tidak bisa membuat shotdown hook dalam shutdown hook.
Hanya ada satu rangkaian eksekusi shutdown hook pada JVM, tidak diizinkan menambahkan lebih dari satu perintah shutdown hook. Jika terdapat lebih dari satu shutdown hook maka JVM akan menganggapnya sebagai IllegalStateException.

lima, Ketika perintah shutdown hook dijalankan, perintah tersebut hanya bisa dihentikan dengan Runtime.halt().
Ketika rangkaian perintah shutdown hook telah dijalankan, hanya Runtime.halt() yang dapat menghentikan proses eksekusi secara paksa pada JVM dari rangkaian perintah eksekusi, kecuali ada faktor eksternal seperti SIGKILL. Artinya, pemanggilan perintah System.exit() di dalam shutdown hook tidak akan berfungsi. Hanya saja, jika pemanggilan System.exit() dilakukan dalam perintah shutdown hook, kemungkinan mesin virtual akan mengalami kemacetan dan terpaksa harus dimatikan secara paksa.

enam, Penggunaan shutdown hook memerlukan persyaratan izin keamanan.
Jika komputer menggunakan Java Securityy managers, maka penambahan atau penghapusan perintah shutdown hook memerlukan izin runtime. Jika menghubungkan method tersebut tanpa melakukan permintaan izin pada security manager, maka method tersebut akan menghasilkan SecurityException.

Java menyediakan mekanisme yang disebut "Shutdown Hook" yang memungkinkan pengembang untuk mengeksekusi kode tertentu sebelum JVM (Java Virtual Machine) benar-benar berhenti. Berikut adalah kelebihan dari implementasi JVM Shutdown Hook dan bagaimana hal ini dapat meningkatkan keamanan dan pemeliharaan aplikasi Java:
  • Pemeliharaan Terkontrol:
    • Eksekusi Kode Sebelum Penutupan: Shutdown Hook memungkinkan pengembang untuk menetapkan kode tertentu yang akan dieksekusi sebelum JVM benar-benar berhenti. Hal ini memungkinkan pembersihan sumber daya dan pemeliharaan terkontrol sebelum aplikasi berakhir.
    • Pencegahan Kehilangan Data: Dengan menetapkan tindakan pemeliharaan melalui Shutdown Hook, aplikasi dapat mencegah kehilangan data yang penting atau melaksanakan tugas tertentu sebelum menutup.
  • Pembebasan Sumber Daya:
    • Pembersihan Sumber Daya Eksternal: Shutdown Hook dapat digunakan untuk membebaskan sumber daya eksternal, seperti koneksi database, file handle, atau koneksi jaringan. Ini membantu mencegah kebocoran sumber daya yang dapat terjadi jika aplikasi berhenti secara tiba-tiba.
    • Penghentian Proses yang Aman: Dengan melakukan pembersihan sumber daya eksternal, aplikasi dapat berhenti dengan cara yang lebih aman, menghindari masalah atau kerusakan data yang dapat terjadi jika sumber daya tidak dibebaskan secara benar.
  • Logging dan Pemantauan:
    • Rekam Kegiatan Terakhir: Shutdown Hook dapat digunakan untuk penyimpan kegiatan terakhir atau status aplikasi sebelum berhenti. Ini dapat berguna untuk keperluan logging dan pemantauan, memberikan wawasan tentang kondisi terakhir aplikasi.
    • Pemberitahuan Kepada Administrator: Dengan mengimplementasikan Shutdown Hook, aplikasi dapat memberikan pemberitahuan kepada administrator atau sistem pemantauan bahwa aplikasi akan berhenti, memberikan kesempatan untuk reaksi yang sesuai.
  • Menangani Sinyal dan Exception:
    • Penanganan Sinyal: Shutdown Hook memungkinkan penanganan yang lebih baik terhadap sinyal-sinyal yang dapat menyebabkan aplikasi berhenti. Ini dapat membantu dalam menangani kondisi abnormal atau kesalahan yang mungkin terjadi.
    • Exception Handling: Shutdown Hook memberikan kesempatan untuk menangani exception dan kesalahan secara terkontrol, memungkinkan aplikasi untuk memberikan pesan kesalahan yang informatif atau melakukan tindakan pemulihan sebelum penutupan.
  • Kustomisasi dan Fleksibilitas:
    • Skenario Khusus: Shutdown Hook memungkinkan pengembang untuk menyesuaikan tindakan yang berbeda tergantung pada skenario penutupan aplikasi. Ini memberikan fleksibilitas dalam menangani berbagai situasi penutupan.
    • Menghindari Kerugian Data: Dengan kemampuan untuk menyesuaikan tindakan yang dilakukan saat penutupan, Shutdown Hook membantu menghindari kerugian data atau kerugian fungsionalitas yang mungkin terjadi jika aplikasi tidak ditutup dengan benar.

Kesimpulan

Membuat JVM Shutdown Hook adalah praktik yang sangat dianjurkan dalam pengembangan aplikasi Java. Kelebihan-kelebihan yang telah disebutkan di atas membuktikan bahwa Shutdown Hook membantu meningkatkan keamanan, pemeliharaan, dan keandalan aplikasi. Dengan merencanakan dan mengeksekusi tindakan tertentu sebelum penutupan aplikasi, pengembang dapat memastikan bahwa proses berakhir dengan baik dan efisien.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Salsabila Qurratu 'Ain Nailah Afuwwu, Sindy Nilasari Putri Wardani, Ulfa Laela Rahmadon, Vicky Septyawan, dan Yullya Adhe Putri.

5 komentar untuk "Membuat JVM Shutdown Hook Java dan Fungsinya"

  1. Apa yang dimaksud dengan shutdown hook pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Shutdown Hook pada Java secara sederhanya adalah sebuah utas yang diinisialisasi tetapi belum dimulai pada thread. Ketika JVM memulai urutan shutdown, proses tersebut akan memulai semua hook shutdown hook yang terdaftar dalam beberapa urutan yang tidak ditentukan dan akan membiarkannya berjalan secara bersamaan.

      Hapus
  2. Dalam bahasa pemrograman Java programmer dapat membuat shutdown hook pada program yang dikembangkannya, dimana programmer dapat membuat suatu thread baru dan memberikan logika yang dapat dijalankan ketika JVM akan dimatikan. Kemudian programmer juga dapat mendaftarkan clss instance thrread sebagai shutdown hook ke mesin virtual atau JVM menggunakan Runtime.getRuntime().

    BalasHapus
  3. Apa yang dimaksud dengan hook pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Hook dalam bahasa pemrograman Java adalah suatu method dari potongan kode progan yang diletakkan didepan potongan kode program lainnya, sehingga potongan kode program pertama akan dieksekusi sebelum potongan kedua dieksekusi, dan sekaligus memberikan potongan kode program pertama kesempatan untuk melakukan pemantauan atau penyarikan dari behavior-nya dari potongan kode program ke dua pada Java.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -