Lompat ke konten Lompat ke sidebar Lompat ke footer

Membuat JVM Stack Area Java dan Fungsinya

Pada dasarnya JVM adalah sebuah stack dan register mesin pada bahasa pemrograman Java. Setiap frame untuk pemanggilan method memiliki "operand stack" dan array dari variabel lokal (Lindholm, dkk. 2015). JVM menciptakan stack terpisah pada saat thread yang diciptakan. Penggunaan memori untuk JVM stack tidak dibutuhkan secara berkelanjutan. JVM hanya aktif pada dua operasi secara langsung pada Java Stack, yaitu pada saat push dan pops frameStack pada thread tertentu akan dianggap sebagai Runtime Stack


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

Setiap method memanggil operasinya menggunakan thread tersebut yang disediakan sesuai dengan runtime stack-nya termasuk parameter, variabel lokal, komputasi terdekat, dan data lainnya. Setelah method selesai dijalankan, entry yang cocok akan dihapus. Setelah menyelesaikan semua panggilan, method stack akan dikosongkan dan stack yang kosong akan dihancurkan oleh JVM sebelum thread dimatikan. Data yang disediakan pada stack juga tersedia untuk thread yang cocok dan tidak tersedia untuk thread sisa. Oleh karena itu, pengembang bisa menyebut data lokal sebagai thread safe. Setiap masukkan pada stack disebut dengan stack frame atau activation record (aktivasi penyimpanan) seperti ditunjukkan pada gambar 1.

Keterangan Gambar 1
  • LVA: Local Variable Array
  • OS: Operand Stack
  • FD: Frame Data

Struktur Bingkai Stack

Bingkai stack pada dasarnya terdiri dari tiga bagian yaitu: variabel array lokal, stack operand, dan data frame atau bingkai data. Ketika JVM memanggil method Java, yang dilakukan JVM adalah memeriksa data class untuk menentukan jumlah huruf yang dibutuhkan oleh method pada variabel array lokal dan operand stack. JVM menciptakan stack frame dari ukuran yang sesuai untuk memanggil method dan mendorongnya menuju Java stack.

Gambar 1 Stack Frame atau Activation Record Java
Gambar 1 Stack Frame atau Activation Record Java

Variabel array local (LVA atau local variables array):
  • Variabel lokal adalah bagian dari stack frame yang diatur sebagai array berbasis nol dari kata yang digunakan.
  • LVA mengandung semua parameter dan variabel lokal dari method.
  • Setiap slot pada entry array terdiri dari 4 bytes.
  • Nilai dari tipe data integer, dan yang setara menempati 1 entry atau slot dalam array 4 bytes.
  • Nilai dari tipe data double dan long menempati 2 entry secara berurutan pada array 8 bytes.
  • Tipe data byteshort, dan char akan dikonversi ke dalam tipe data integer dan menempati 1 slot ukuran 4 bytes.
  • Tetapi penempatan nilai Boolean adalah bervariasi dari satu JVM ke JVM lain. Tetapi, kebanyakan JVM memberikan 1 slot untuk tipe data Boolean pada variabel array lokal.
  • Parameter akan ditempatkan pada variabel array lokal dalam pesanan sesuai dengan permintaan yang dideklarasikan.
  • Contohnya; misal class Example memiliki method bike(), selanjutnya diperlihatkan pada gambar 2 sebagai berikut:

Baca Juga:

/* Pendeklarasian class */
class Example
{
public void bike(int i, long l, float f, double d, Object o, byte b)
{return 0;}
}

Gambar 2 Local Variables Array pada Java
Gambar 2 Local Variables Array pada Java


Operand Stack (OS):
  • JVM menggunakan operand stack sebagai ruang kerja seperti rough work atau tempat penyimpanan hasil kalkulasi sementara.
  • Operand stack diatur sebagai array huruf seperti variabel array lokal, namun tidak seperti pengaksesan menggunakan indek, seperti variabel array lokal, melainkan pengaksesannya menggunakan beberapa instruksi sehingga bisa mendorong nilai menuju operand stack dan beberapa instruksi yang bisa mengeluarkan nilai dari operand stack, serta beberapa instruksi lain yang bisa menunjukkan kebutuhan operasi.
  • Contohnya; diperlihatkan beberapa JVM menggunakan kode berikut yang dapat disubstrak ke dalam dua variabel lokal yang mengandung dua integer dan menyimpannya pada variabel lokal ketiga.
    • iload_0 // mendorong int dalam pengoperasian stack
    • iload_1 // mendorong int dalam pengoperasian stack
    • isub // menampilkan dan melakukan substraksi dua int dan mendorongnya mengeluarkan hasil dalam pengoperasian stack
    • istore_2 // mengeluarkan hasil dan menyimpannya ke dalam variabel lokal pada index 2 
  • Dua instruksi berikut ini lload_0 dan lload_1 akan mendorong nilai dalam operand stack dari variabel lokal untuk pergi, dan instruksi isub akan mensubtraksi kedua nilai tersebut dan menyimpannya kembali menuju operand stack. Setelah hasil dari istore_2 muncul dari operand stack maka akan tersedia pada variabel array lokal pada posisi 2 seperti diperlihatkan pada gambar 3.


Frame Data (FD):
  • FD mengandung semua refensi simbol dan pengembalian normal method dengan metode tertentu.
  • FD juga mengandung referensi untuk Exception table yang menyediakan korenpondensi tangkapan informasi blok pada kondisi tertentu.

Java Virtual Machine (JVM) Stack Area merupakan elemen kunci dalam eksekusi program Java, menyediakan alokasi memori lokal untuk setiap thread yang berjalan. Dalam artikel ini, akan dijelaskan kelebihan JVM Stack Area dalam meningkatkan optimalisasi eksekusi dan manajemen memori pada program Java, yakni sebagai berikut:
  • Pengalokasian Memori Lokal:
    • Isolasi Thread: JVM Stack Area memberikan setiap thread dalam program Java alokasi memori lokal sendiri. Ini menciptakan isolasi antara thread, mencegah konflik dan interferensi data yang mungkin terjadi antar thread.
    • Efisiensi Eksekusi: Dengan alokasi memori lokal, pengaksesan data menjadi lebih efisien karena setiap thread dapat mengakses JVM Stack Area sendiri tanpa mengganggu data dari thread lain.
  • Frame-based Execution:
    • Optimalisasi Pemanggilan Fungsi: JVM Stack Area menggunakan pendekatan frame-based untuk pemanggilan fungsi. Setiap kali fungsi dipanggil, sebuah frame baru dibuat di Stack Area, yang memungkinkan manajemen variabel lokal dan operand stack secara efisien.
    • Penanganan Pemanggilan Rekursif: Struktur frame memungkinkan JVM untuk menangani pemanggilan rekursif secara efektif dan mencegah terjadinya stack overflow dengan mengelola tumpukan pemanggilan.
  • Manajemen Memori yang Efisien:
    • Dealokasi Otomatis: Setelah metode atau fungsi selesai dieksekusi, frame yang terkait dengannya dihapus dari JVM Stack Area secara otomatis. Hal ini membantu dalam dealokasi memori yang efisien.
    • Pengelolaan Variabel Lokal: Variabel lokal yang digunakan dalam suatu metode hanya ada selama eksekusi metode tersebut. Setelah metode selesai, variabel lokal tersebut didealokasi, menyumbang pada manajemen memori yang lebih baik.
  • Manfaat Reverse Domain Naming pada Paket:
    • Organisasi Struktur Paket: Prinsip reverse domain naming pada penamaan paket Java membantu dalam organisasi struktur paket secara hierarkis. Ini memfasilitasi manajemen dan navigasi proyek yang besar.
    • Mencegah Tabrakan Nama Paket: Dengan menggunakan domain sebagai bagian dari nama paket, JVM Stack Area membantu mencegah tabrakan nama paket, mengurangi potensi konflik dalam pengembangan perangkat lunak.
  • Perlindungan Terhadap Kecelakaan Nama dan Tabrakan Stack:
    • Ketegasan pada Uniknya Nama: Java memastikan bahwa setiap nama kelas harus unik dalam satu paket, menghindari kecelakaan nama yang dapat terjadi dalam pengembangan perangkat lunak.
    • Pencegahan Stack Overflow: Struktur frame dalam JVM Stack Area membantu mencegah stack overflow dengan mengelola secara bijaksana tumpukan pemanggilan fungsi, menghindarkan potensi kecelakaan dan crash aplikasi.

Referensi Tambahan:

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

6 komentar untuk "Membuat JVM Stack Area Java dan Fungsinya"

  1. Ada yang bisa bantu jelasin dengan lebih sederhana haha

    BalasHapus
    Balasan
    1. Untuk dapat memahami stack pada Java, terlebih dahulu mari kita pahami apa yang dimaksud dengan stack itu sendiri.

      Stack adalah struktur data linier yang mengikuti aturan tertentu dimana operasi dilakukan. Urutan struktur nya adalah FILO atau First in last Out atau juga LIFO (last in first out).

      Sederhananya, untuk membuat rancangan stack umumnya digunakan array (jika input bernilai tetap), lainnya adalah linked list, setelah itu barulah dapat dilakukan operasi stack.

      Jenis operasi stack terdiri dari
      1. Push : Digunakan untuk memasukkan elemen atau inputan ke dalam stack.

      2. Pop : digunakan untuk mengambil elemen atau inputan dari dalam stack.

      3. Peek : Untuk mengetahui nilai apa yang berada pada urutan paling awal.

      4. Empty : Untuk mengetahui apakah stack bernilai kosong atau tidak.

      Setelah paham, mari masuk bahasan stack pada bahasa pemrograman Java.

      Jadi, stack pada java itu sudah disediakan melalui sebuah frame work yang diimplementasikan dalam sebuah class.

      Jadi, java sudah menyediakan sebuah class stack yang siap pakai tanpa perlu dirancang penggunaannya dari awal menggunakan bahasa Java.

      Muncul pertanyaan, gimana sih cara pake stack pada java?

      Untuk dapat menggunakan stack pada Java maka yang perlu dilakukan adalah import util package.

      pada awal baris program java ketik-->

      import java.util.Stackl

      maka java akan memberikan akses ke dalam class Stack. Selanjutnya adalah menciptakan objeck dari class stack dengan menggunakan perintah operasi sebagai berikut"

      Object creation : Stack st=new Stack<>();

      Perintah push(),pop(),peek(),empty() dapat dijalankan pada object stack yang telah diciptakan tersebut. Ditambah satu lagi perintah search() yang digunakan untuk mengetahui apakah object stack sudah diciptakan atau belum.

      Hapus
  2. Stack klo diterjemahin artinya itu 'tumpukan'. Bayangkan membeli satu dus shuttlecock (bola bulu tangkis). Klo kita ingin mengerluarkan bola dari dus, maka yang kita ambil adalah bola paling bawah (pop ()). Sedangkan jika kita ingin memasukkan bola dalam tumpukan dus, maka kita memasukkannya dari bagian atas dus (push ()).

    saat kita melakukan push (), maka bola yang berada pada urutan paling atas akan terdorong ke dalam, begitu pula bola yang sudah ada di dalam akan semakin terdorong, hingga posisi bola paling luar dan siap dikeluarkan dari dus bola.

    Begitupun analogi Stack yang digunakan pada struktur data. LIFO atau Last in first out.

    Bagaimana dengan java? di Java kita bisa membuat sebuah alur algoritma program yang sama dengan Stack. Namun, supaya lebih hemat waktu, algoritma stack tersebut sudah disediakan secara langsung oleh java dalam bentuk class. Yang dilakukan cukup import classnya sada pada program yang kita buat, dan setelah diimport class tersebut dapat dipanggil untuk langsung digunakan, itu..

    BalasHapus
  3. Jika membahas stack itu sendiri, sebenarnya bisa mengacu pada beberapa hal yang berbeda:

    Stack struktur data : adalah sebuah struktur dari data yang masuk pertama keluar terakhir, yang paling banyak digunakan dalam membangun parser.

    Call stack : digunakan oleh runtime environment untuk mempertahankan status eksekusi dan rantai pemanggilan method.

    Software stack: merupakan tumpukan perangkat lunak atau teknologi solusi dari sebuah User Interface ke backend database.

    dan masih banyak, beberapa pembahasan spesifik lainnya...

    BalasHapus
  4. Memori Java Stack digunakan untuk mengeksekusi thread, berisi method dengan nilai khusus yang sifatnya sementara dan referensi object lain pada heap yang dirujuk dari method.

    Dengan tumpukan memori selalu mengikuti aturan LIFO (Last in First Out). Setiap kali method dipanggil, blok baru akan dibuat dalam stack untuk supaya method tersebut dapat menyimpan nilai variabel lokal dan referensi ke object lain dalam method tersebut.

    BalasHapus
  5. DAFTAR RUJUKAN

    Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (2015-02-13). The Java Virtual Machine Specification (Java SE 8 ed.).

    BalasHapus

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 -