Inilah Evolusi Model Memori Java Sejak Java 8 - CRUDPRO

Inilah Evolusi Model Memori Java Sejak Java 8

Inilah Evolusi Model Memori Java Sejak Java 8

Apakah itu Java Virtual Machine (JVM):

Java Virtual Machine (JVM) adalah elemen kunci dari basis Java yang sediakan independensi perangkat keras dan mekanisme operasi, kode gabungan yang singkat, dan pelindungan pada program jahat.

JVM bekerja sebagai mesin komputasi abstrak, dengan set perintahnya sendiri dan manajemen memori runtime. Pemakaian mesin virtual adalah pendekatan umum untuk implementasi bahasa pemrograman, dengan mesin P-Code dari UCSD Pascal jadi contoh yang populer.

Implementasi awalnya JVM dilaksanakan di Sun Microsystems, Inc. dan mengemulasi set perintahnya pada perangkat genggam yang seperti PDA. Sekarang ini, implementasi Oracle berjalan pada perangkat seluler, desktop, dan server, tapi JVM tidak tentukan teknologi implementasi, perangkat keras, atau mekanisme operasi. Itu bisa diterapkan lewat perangkat lunak, mikrokode, atau langsung pada silikon.

JVM tidak ketahui bahasa pemrograman Java, cuma mengenal pola biner tertentu, pola file kelas. File kelas terbagi dalam perintah JVM (bytecode), tabel lambang, dan info yang lain.?

Untuk argumen keamanan, JVM mengaplikasikan sintaks yang ketat dan batas sistematis pada file kelas. Akan tetapi, bahasa apa saja yang bisa dilukiskan lewat file kelas yang benar bisa berjalan pada JVM, menjadikan basis yang memikat untuk eksekutor bahasa yang lain.

JVM yang diterangkan di sini cocok dengan basis Java SE 19 dan memberikan dukungan bahasa pemrograman Java seperti diartikan dalam Fitur Bahasa Java, Edisi Java SE 19.

Inilah Evolusi Model Memori Java Sejak Java 8

Model Memori Java telah mengalami beberapa perubahan sejak Java 8. Beberapa perubahan utama meliputi:

No
Model Memori Java telah mengalami beberapa perubahan sejak Java 8. Beberapa perubahan utama meliputi:
1
Pengenalan Metaspace: Di Java 8, ruang Generasi Permanen (PermGen) diganti dengan Metaspace, yang merupakan ruang memori dinamis untuk menyimpan metadata kelas. Ini menghilangkan kesalahan "java.lang.OutOfMemoryError: PermGen space" yang dapat terjadi dengan PermGen. Detail
2
Pengumpul trash G1: Di Java 9, pengumpul trash G1 diperkenalkan sebagai pengumpul trash default. Ini adalah pengumpul trash bersamaan dengan jeda rendah yang dirancang untuk meningkatkan kinerja aplikasi dengan ukuran tumpukan besar. Detail
3
JDK Flight Recorder (JFR): Di Java 9, JDK Flight Recorder (JFR) diperkenalkan sebagai fitur komersial. JFR adalah kerangka pembuatan profil dan pengumpulan peristiwa yang memungkinkan pengembang untuk mengumpulkan data kinerja dan diagnostik mendetail dari aplikasi Java yang sedang berjalan. Detail
4
Perbaikan Java untuk Container Docker: Java 10 memperkenalkan perubahan untuk meningkatkan eksekusi dan konfigurasi Java yang berjalan di Container Docker. JDK-8146115 Meningkatkan deteksi Container docker dan penggunaan konfigurasi sumber daya :JVM telah dimodifikasi untuk menyadari bahwa itu berjalan dalam container Docker dan akan mengekstrak informasi konfigurasi khusus container alih-alih menanyakan sistem operasi. Informasi yang diekstraksi adalah jumlah CPU dan total memori yang telah dialokasikan ke container. Jumlah total CPU yang tersedia untuk proses Java dihitung dari kumpulan cpu tertentu, pembagian cpu, atau kuota cpu. Detail
5
Pengumpul sampah ZGC: Di Java 11, pengumpul sampah ZGC diperkenalkan sebagai fitur eksperimental. Ini adalah pengumpul sampah latensi rendah yang dirancang untuk mendukung ukuran tumpukan besar dengan jeda GC yang sangat singkat. Detail
6
Pengumpul sampah Epsilon: Di Java 11, pengumpul sampah Epsilon diperkenalkan sebagai fitur eksperimental. Ini adalah pengumpul sampah tanpa operasi yang tidak melakukan pengumpulan sampah yang sebenarnya. Ini dimaksudkan untuk tujuan pengujian dan evaluasi kinerja. Detail
7
JEP 331: Low-Overhead Heap Profiling: Java 11 memperkenalkan fitur baru yang disebut Low-overhead Heap Profiling, yang memungkinkan pengembang membuat profil penggunaan heap aplikasi mereka dengan overhead minimal. Detail
8
JEP 379: Shenandoah: Pengumpul Sampah Waktu Jeda Rendah: Java 12 memperkenalkan Shenandoah sebagai fitur eksperimental, ini bertujuan untuk mengurangi jeda GC, yang dapat mengganggu di beberapa beban kerja, dengan melakukan lebih banyak pengumpulan sampah secara bersamaan dengan aplikasi yang sedang berjalan. Detail
9
JEP 334 JVM Constants API : Java 12 diperkenalkan Paket baru java.lang.invoke.constant memperkenalkan API untuk memodelkan deskripsi nominal file kelas dan artefak run-time, khususnya konstanta yang dapat dimuat dari kumpulan konstanta. Itu dilakukan dengan mendefinisikan keluarga tipe referensi simbolik berbasis nilai (JVMS 5.1), yang mampu menggambarkan setiap jenis konstanta yang dapat dimuat. Referensi simbolik mendeskripsikan konstanta yang dapat dimuat dalam bentuk nominal murni, terpisah dari pemuatan kelas atau konteks aksesibilitas. Beberapa kelas dapat bertindak sebagai referensi simbolik mereka sendiri (mis., String); untuk konstanta yang dapat ditautkan, keluarga tipe referensi simbolik telah ditambahkan (ClassDesc, MethodTypeDesc, MethodHandleDesc, dan DynamicConstantDesc) yang berisi informasi nominal untuk mendeskripsikan konstanta ini. Detail
10
JEP 343: Alat Pengemasan: Java 14 memperkenalkan JEP 343, yang merupakan alat baru untuk membuat aplikasi Java mandiri. Alat ini memungkinkan pengembang untuk mengemas aplikasi mereka dan semua ketergantungannya ke dalam satu file yang dapat dieksekusi, membuatnya lebih mudah untuk didistribusikan dan dijalankan pada sistem yang berbeda. Detail
11
JEP 361: Milling Project Coin: Java 14 memperkenalkan Milling Project Coin, yang merupakan serangkaian perubahan bahasa kecil yang bertujuan untuk meningkatkan keterbacaan dan ekspresi bahasa Java. Perubahan ini mencakup penghapusan kebutuhan akan tanda kurung dalam beberapa kasus saat memanggil metode, kemampuan untuk menggunakan kata kunci var untuk inferensi tipe, dan perubahan pada pernyataan switch untuk membuatnya lebih kuat dan fleksibel.Detail.
12
JEP 363: Hapus Pengumpul Sampah Serentak Tanda Sapu (CMS): Java 14 Menghapus Pengumpul Sampah Serentak Tanda Sapu (CMS). Detail
13
JEP 364: ZGC di macOS: Java 14 memperkenalkan ZGC Garbage Collector di macOS, yang memungkinkan pengguna macOS memanfaatkan kemampuan latensi rendah dan ukuran heap ZGC GC yang besar. Detail
14
JEP 365: ZGC di Windows (Eksperimental): Java 14 memperkenalkan ZGC Garbage Collector di Windows, yang memungkinkan pengguna Windows memanfaatkan kemampuan latensi rendah dan ukuran tumpukan besar dari ZGC GC. Detail
15
JEP 366: Menghentikan Kombinasi ParallelScavenge + SerialOld GC : Java 14 Menghentikan kombinasi algoritme pengumpulan sampah Parallel Scavenge dan Serial Old. Kombinasi ini harus diaktifkan secara khusus oleh pengguna dengan opsi baris perintah -XX:+UseParallelGC -XX:-UseParallelOldGC. Detail
16
JEP 394: Pencocokan Pola untuk instanceof: Java 14 memperkenalkan pencocokan pola untuk operator instanceof yang didukung sebagai JEP-305, yang memungkinkan pengembang mencocokkan dan mengekstrak data dari objek menggunakan sintaks yang lebih ringkas dan ekspresif. Fitur ini sangat berguna untuk bekerja dengan struktur data yang kompleks dan untuk mengurangi jumlah kode boilerplate. Detail
17
JEP 370: API Akses Memori Asing: Java 14 memperkenalkan API Akses Memori Asing, yang memungkinkan kode Java mengakses memori asing dengan aman dan efisien di luar tumpukan Java. Fitur ini sangat berguna untuk aplikasi intensif memori dan untuk berinteraksi dengan sistem dan bahasa lain. Detail
18
JEP 384: Catatan: Java 14 memperkenalkan Catatan, yang merupakan fitur baru yang memungkinkan pengembang untuk menentukan kelas data yang ringan, tidak dapat diubah, dan transparan. Rekaman memberikan cara yang ringkas dan ekspresif untuk memodelkan struktur data sederhana, dan merupakan alternatif yang lebih ringkas dan mudah dibaca untuk kelas Java tradisional. Detail.
19
JEP 371: Kelas Tersembunyi: Java 15 memperkenalkan konsep Kelas Tersembunyi, yang memungkinkan untuk memuat kelas yang tidak terlihat oleh classloader yang memuatnya, ini adalah fitur yang ampuh untuk kerangka kerja dan pustaka yang perlu memuat kelas secara dinamis. Detail
20
JEP 389: Foreign Linker API: Java 15 memperkenalkan Foreign Linker API, yang memungkinkan kode Java terhubung secara aman dan efisien dengan pustaka asli dan untuk memanggil fungsi asli. Fitur ini sangat berguna untuk berinteraksi dengan sistem dan bahasa lain serta untuk kode yang sangat penting bagi kinerja.Detail
21
JEP 372: Menghapus Mesin JavaScript Nashorn: Java 15 menghapus Mesin JavaScript Nashorn yang tidak digunakan lagi di Java 11, mesin ini digunakan untuk mengeksekusi kode JavaScript dari dalam aplikasi Java. Detail
22
JEP 378: Pencocokan Pola untuk instanceof: Java 15 memperkenalkan pencocokan pola untuk operator instanceof, yang memungkinkan pengembang mencocokkan dan mengekstrak data dari objek menggunakan sintaks yang lebih ringkas dan ekspresif. Fitur ini sangat berguna untuk bekerja dengan struktur data yang kompleks dan untuk mengurangi jumlah kode boilerplate. Detail
23
JEP 373: Implementasi Ulang Legacy DatagramSocket API: Java 15 mengimplementasikan kembali Legacy DatagramSocket API, yang memungkinkan pengembang untuk bekerja dengan DatagramSocket API menggunakan tumpukan I/O baru. Detail
24
JEP 378: Blok Teks: Java 15 memperkenalkan Blok Teks, fitur baru yang memungkinkan pengembang untuk mendefinisikan literal string multiline dengan cara yang lebih mudah dibaca dan nyaman. Fitur ini sangat berguna untuk bekerja dengan string besar, seperti data JSON atau XML.Detail
25
JEP 371: Kelas Tersembunyi: Java 15 memperkenalkan kelas Tersembunyi, yang merupakan fitur baru yang memungkinkan pengembang memuat kelas yang tidak terlihat oleh pemuat kelas yang memuatnya. Kelas tersembunyi berguna untuk kerangka kerja dan pustaka yang perlu memuat kelas secara dinamis, dan juga dapat digunakan untuk membuat kode yang lebih aman dan dapat dipelihara dengan mencegah hierarki kelas yang tidak diinginkan. Detail
26
JEP 386: Alpine Linux Port: Java 16 memperkenalkan port Java SE Platform ke sistem operasi Alpine Linux, yang merupakan distribusi Linux ringan yang biasa digunakan di Environment Container. Port ini memungkinkan pengembang untuk menjalankan aplikasi Java di Alpine Linux dengan fitur dan performa yang sama seperti di platform lain. Detail
27
JEP 338: Vector API: Java 16 memperkenalkan Vector API, yang merupakan fitur baru yang memungkinkan pengembang untuk melakukan perhitungan vektor pada larik nilai primitif menggunakan serangkaian instruksi tingkat rendah dan sangat optimal. Fitur ini dapat digunakan untuk meningkatkan performa perhitungan numerik dan ilmiah, dan untuk jenis beban kerja lain yang dapat memanfaatkan vektorisasi.Detail
28
JEP 412: API Fungsi & Memori Asing : Java 17 memperkenalkan API Fungsi & Memori Asing di mana program Java dapat beroperasi dengan kode dan data di luar runtime Java. Dengan memanggil fungsi asing secara efisien (yaitu, kode di luar JVM), dan dengan mengakses memori asing dengan aman (yaitu, memori yang tidak dikelola oleh JVM), API memungkinkan program Java untuk memanggil pustaka asli dan memproses data asli tanpa kerapuhan dan bahaya JNI. Detail
29
JEP 400: Kelas Tertutup: Java 18 memperkenalkan kelas Tertutup, yang merupakan fitur baru yang memungkinkan pengembang untuk membatasi kelas mana yang dapat memperluas atau mengimplementasikan kelas atau antarmuka tertentu. Fitur ini dapat digunakan untuk membuat kode yang lebih aman dan dapat dipelihara dengan mencegah hierarki kelas yang tidak diinginkan. Detail
30
JEP 424 Foreign Function & Memory API : Java 19 memperkenalkan API dimana program Java dapat beroperasi dengan kode dan data di luar runtime Java. Dengan memanggil fungsi asing secara efisien (yaitu, kode di luar JVM), dan dengan mengakses memori asing dengan aman (yaitu, memori yang tidak dikelola oleh JVM), API memungkinkan program Java untuk memanggil pustaka asli dan memproses data asli tanpa kerapuhan dan bahaya JNI. Ini adalah API pratinjau. Detail

30-a.:JEP 426 Vector API (Fourth Incubator) :Java 19 memperkenalkan API untuk mengekspresikan komputasi vektor yang dapat dikompilasi secara andal saat waktu proses untuk instruksi vektor yang optimal pada arsitektur CPU yang didukung, sehingga mencapai kinerja yang lebih unggul daripada komputasi skalar yang setara. Detail

Ini adalah beberapa perubahan besar pada model memori Java sejak Java 8, Jelas bahwa tim JVM dan perancang bahasa Java telah secara aktif bekerja dalam meningkatkan JVM dan bahasa Java agar lebih efisien, ekspresif, mudah digunakan dan kuat untuk berbagai jenis beban kerja dan sistem operasi.