subrutin
a sequence of programmer life

Advertisement

Mengatur “Gudang Tumpukan” Java Heap Space

0 5,138

Ketika penulis baru pertama kali belajar bahasa pemrograman java,  penulis juga tidak mengetahui tentang java heap atau heap space, hingga suatu ketika menemui error ini  java.lang.OutOfMemoryError dan barulah tersadar mengenai apa yang disebut  Heap Space di dalam Java.

Advertisement

Hal seperti ini, saya yakin juga terjadi kepada pembaca, dan juga sebagian besar programmer yang lain. Belajar  bahasa pemrograman memanglah mudah, namun mempelajari konsep dasarnya itu yang sulit, karena memang tidak ada proses formal yang dapat mengajarkan kita dasar-dasar pemrograman. Pengalaman memang guru yang terbaik untuk mengungkap rahasia dari setiap bahasa pemrograman.

Untuk seorang java programmer, pengetahuan akan  Java Heap, menetapkan berapa ukuran java heap, berurusan dengan error heap space  OutOfMemoryError, menganalisis heap dump  adalah sangatlah penting. Tutorial Java Heap ini  diperuntukkan bagi para  pemula yang baru mempelajari bahasa bahasa pemrograman java. Penulis akan berusaha untuk memberikan informasi sebanyak mungkin tentang Heap di Java sepanjang pengetahuan saya. Tetapi jika pembaca ingin berkontribusi dan berbagi pengetahuan tentang  Java Heap, maka hal itu akan membantu kita semua.

Apa itu Java Heap Space?
Ketika sebuah program Java dimulai, Java Virtual Machine mendapatkan sejumlah memori dari Sistem Operasi. Java Virtual Machine atau disingkat JVM menggunakan memori ini untuk semua kebutuhan. Sebagian dari memori ini disebut memori java heap. Heap (yang berarti tumpukan) di dalam java umumnya terletak ruang alamat paling bawah dan kemudian menaik keatas. Setiap kali kita membuat objek menggunakan operator baru atau dengan yang lain, berarti sebuah object dialokasikan dari memori Heap dan Ketika object tersebut telah mati dan dikumpulkan oleh Garbage collector, maka sejumlah  memori ini dikembalikan ke heap space .

Ukuran Heap Space

Ukuran standar Heap space di Java umumnya adalah 128MB pada sebagian besar JVM Sun 32 bit, namun bisa sangat bervariasi dari satu jenis JVM ke JVM lain. Misalnya maximum heap space dan initial heap  untuk Sistem Operasi 32-bit Solaris (Platform SPARC  Edition) adalah-Xms = 3670K dan-Xmx = 64M dan nilai-nilai default dari  parameter heap space pada sistem 64-bit telah meningkat sampai sekitar 30%.

Jika pembaca menggunakan garbage collector  pada Java 1.5, ukuran maximum heap space JVM adalah Memori Fisik / 4 dan ukuran initial heap space adalah sama dengan ukuran Memori fisik/16 . Cara lain untuk mendapatkan heap space default pada JVM adalah dengan menjalankan aplikasi dengan menggunakan parameter heap default dan memonitor dengan menggunakan JConsole yang tersedia di JDK 1,5 ke atas, pada tab VMSummary kita akan dapat melihat ukuran maximum heap

 

Mulai Java 6 update 18 terdapat perubahan yang signifikan dalam bagaimana JVM menghitung ukuran standar tumpukan dalam  mesin 32 dan 64 bit dan pada klien dan server modus JVM yakni,

1) Initial Heap Space  dan maximum heap space berukuran menjadi lebih besar untuk meningkatkan kinerja.
2) maximum heap space secara default berukuran 1/2 dari memori fisik yang berukuran hingga 192 byte dan 1/4 dari memori fisik yang berukuran hingga 1GB. Jadi untuk mesin 1 GB, heap space maksimum adalah 256MB. Ukuran maximum heap space tidak akan digunakan hingga program java yang kita buat menciptakan objek yang cukup untuk mengisi initial heap space  yang akan jauh lebih rendah setidaknya 8-MB atau 1/64 bagian dari ukuran memori fisik 1GB.

3) untuk Server JVM standar, maximum heap space adalah 1GB untuk memori fisik sebesar 4GB  JVM 32-bit. Sedangkan untuk JVM 64 bit, adalah 32GB  untuk memori fisik berukuran 128GB.

Referensi lebih lengkap silahkan simak : http://www.oracle.com/technetwork/java/javase/6u18-142093.htm

Meningkatakan Heap Space Pada Eclipse

Dengan cara tersebut, pembaca dapat meningkatkan ukuran java heap space berdasarkan kebutuhan aplikasi. Namun direkomendasikan untuk menghindari penggunaan nilai heap  JVM default jika menggunakan  besar dan melibatkan banyak objek.

ukuran heap space dapat diubah pada Xms dan Xmx. Xms menunjukkan ukuran mulai dari Heap sementara-Xmx menunjukkan ukuran maksimum Heap di java. Ada lagi parameter yang disebut-Xmn yang menunjukkan ukuran dari pembangkitan baru java heap space.

Yang perlu diperhatikan adalah, ukuran Heap di Java tidak bisa secara dinamis, programmer hanya dapat memberikan parameter ukuran Java Heap saat memulai JVM.

1) Mengubah File .ini di  Eclipse: File .ini dapat ditemukan di folder yang sama dengan file eksekusi Eclipse.  Kemudian pembaca akan melihat beberapa pilihan seperti ini.:

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m

Tampilan tersebut diatas menunjukkanminimum heap space (-Xms40m) yang diatur ke 40MB dan maximum heap space (-Xmx256m) diatur pada nilai 256MB. Mengubah 256M menjadi nilai yang lebih besar, misalnya 512M akan meningkatkan pasokan heap space pada Eclipse. Ketika penulis membuka file .ini tersebut, secara aktual saya menunjukkan maximum heap space yang lebih besar daripada apa yang ditunjukkan dalam program saya.

Catatan: untuk memeriksa maximum heap space yang tersedia di Java kita bisa  menggunakan baris kode tersebut dalam java:
System.out.println(java.lang.Runtime.getRuntime().maxMemory());

Eclipse sebenarnya tidak membatasi heap space penulus karena file .Ini yang saya buka barusan menunjukkan nilai maksimal 512MB sementara program saya hanya melaporkan 128MB.  Jika ini terjadi, maka kita bisa mencoba cara kedua

2) Memasukkan argumen VM ke JRE kita: ketika Eclipse terbuka, buka Preferences (pada menu Window di Eclipse), kemudian pilih Section Java, klik Installed JREs , klik pada JRE yang digunakan (contoh jre6), klik pada button Edit …, dan masukkan sintaks berikut ke dalam default VM Arguments:

-Xms256M -Xmx512M

Format ini mirip dengan apa yang ada dalam file .ini dimana Xms adalah minimum heap space dan Xmx adalah maximum heap space. Masalahnya adalah bahwa JVM membatasi jumlah memori yang tersedia di heap sehingga argumen harus diteruskan ke VM untuk mengubahnya. Perintah-perintah ini dapat dilakukan melalui command line:

eclipse [normal arguments] -vmargs -Xmx256M [more VM args]

 

advertisement

Get real time updates directly on you device, subscribe now.

Tinggalkan pesanan

Alamat email anda tidak akan disiarkan.