Last Updated on 14 years by Mas Herdi
Bahasa pemrograman Java merupakan bahasa turunan dari C, atau lebih tepatnya bahasa turunan dari C++. Bahasa C, C++ dan Java masih merupakan saudara. Namun bahasa Java dan bahasa C++ adalah saudara dekat. Heran ini kok malah nyambung ke sini ya
Well, Java dan C++, mereka sama-sama berorientasi objek dan mendukung fitur kelas (classes), dan memiliki syntax yang hampir similiar secara konsep.
Sejak awal diciptakannya, bahasa pemrograman C memang banyak menginspirasi berbagai bahasa pemrograman lainnya, contohnya PHP, Objective-C, Perl, Phyton, Java, dan banyak lainnya.
Java sebagai bahasa pemrograman yang juga ter-influenced by bahasa C, mempunyai banyak kesamaan. Tapi Java tidak lantas sama dengan C. Dan bisa diperjelas lagi, bahwa Java itu bukan C ataupun C++.
Java didesain sebagai simplifikasi dari bahasa C/C++ dan sekaligus memperbaiki fitur-fitur keamanan yang kurang di pendahulunya sehingga banyak fitur-fitur bahasa C/C++ yang dihilangkan. Semua itu bertujuan untuk meng-eliminate redundancy, alias meminimalisir proses yang berulang-ulang.
Di dalam evolusinya, bahasa C berubah menjadi kumpulan proses yang, banyak, namun intinya sama, menyediakan terlalu banyak cara untuk melakukan hal yang sama, dimana bahkan dalam beberapa kasus C malah tidak menyediakan fitur yang dibutuhkan.
Salah satu hal yang menjadi ciri khas Java adalah tidak adanya pointer. Sekali lagi saya ulangi, There’s no pointer in Java. Banyak yang bilang, bahkan beberapa teman saya juga bilang, “Ada kok.” Tapi mari kita bahas disini apa yang orang-orang sebut pointer di Java.
Kenapa Tidak Ada Pointer di Java
Banyak penelitian berkesimpulan kalau pointer adalah salah satu fitur utama yang memungkinkan programmer menginjeksikan bugs ke dalam program mereka. Di Java, struktur data sudah dilenyapkan (hal ini akan dibahas lain waktu), dan array dan string adalah objek. Maka kebutuhan untuk memakai pointer bagi struktur tersebut hilang. Ditambah lagi Java tidak punya pointer data types. Algoritma-algoritma yang membutuhkan array, struktur, dan pointer di dalam C bisa lebih mudah dan cepat diselesaikan dengan deklarasi array dan objek dari suatu array. Lalu, apakah kita nggak bisa membuat struktur data seperti linked list, stack dsb pada Java? Tentu saja tidak.
Algoritma di bawah ini adalah contoh linked-list di dalam bahasa C, dan memakai pointer tentunya~
-
struct Node {
-
int value;
-
struct Node* next;
-
};
-
{
-
// Allocate the pointers
-
struct Node* x;
-
struct Node* y;
-
struct Node* z;
-
-
// Allocate the pointees
-
x = malloc(sizeof(Node));
-
y = malloc(sizeof(Node));
-
z = malloc(sizeof(Node));
-
-
// Put the numbers in the pointees
-
x->value = 1;
-
y->value = 2;
-
z->value = 3;
-
-
// Put the pointers in the pointees
-
x->next = y;
-
y->next = z;
-
z->next = x;
-
}
Lalu, inilah program yang sama jika ditulis dalam bahasa Java
-
class Node {
-
public int value;
-
public Node next;
-
};
-
-
{
-
// Mengalokasikan pointer
-
Node x;
-
Node y;
-
Node z;
-
-
// Mendeklarasikan objek baru
-
x = new Node();
-
y = new Node();
-
z = new Node();
-
-
// Memasukkan nilai ke dalam objek
-
x.value = 1;
-
y.value = 2;
-
z.value = 3;
-
-
// Mengalamatkan pointer ke objek tersebut
-
x.next = y;
-
y.next = z;
-
z.next = x;
-
}
Okay, dengan mengamati dua algoritma di atas. Kita bisa mengamati pointer di Java hanyalah permainan dari objek-objek, object of object. Istilah pointer di Java tidak ada, namun sengaja saya tulis “mengalokasikan pointer” pada algoritma di atas. Pointer di dalam Java telah diganti dengan istilah references. Bahasa Java hampir semuanya adalah references, variable references, object references dan lain-lain. Lantas apa bedanya dengan pointer? Well, mekanisme references di dalam Java juga jauh berbeda, dimana kita tidak perlu mengalokasikan wadah bagi references, dan kita juga tidak perlu membuang references yang tidak terpakai. Masih ingat saat-saat Anda menge-set alamat pointer ke nilai NULL? Saya tahu di saat itu Anda sedang membuang, pointer yang tidak terpakai dengan mengesetnya ke NULL, atau bahasa Inceptionnya di-set ke LIMBO.
Di Java, ada mekanisme khusus yang menanganinya, perkenalkan :
GARBAGE COLLECTOR
Yeah, Garbage Collector, saya lebih suka menyebutnya sebagai pemulung.
Setiap saat Anda membuat suatu objek di Java, objek itu akan masuk ke dalam area yang disebut The Heap. Semua objek, tidak peduli kapanpun, dimanapun atau bagaimanapun objek tersebut dibuat, akan masuk ke dalam heap. Jika Anda membuat sebuah objek, maka Java otomatis akan menyediakan ruang memori di heap sebesar yang objek tersebut butuhkan.
Lantas, bagaimana jika nantinya saya menginginkan ruang memori tersebut kembali? Bagaimana caranya membuang objek yang tidak lagi terpakai dari heap? Nah, Java-lah yang mengatur memori itu untuk Anda. Ketika JVM (Java Virtual Machine) melihat adanya objek yang tidak lagi terpakai, maka objek tersebut akan diumpankan kepada si Pemulung, maksud saya Garbage Collector.
Dan ketika memori Anda sekarat, atau Anda kehabisan memori. Pemulung misterius itu akan bekerja, membuang objek-objek yang tidak terpakai dari heap, membebaskan ruang memori sehingga ruang memori itu bisa dipakai lagi.
Anda tidak lagi dituntut untuk melakukan pengesetan ke NULL pada pointer-pointer yang tidak lagi dipakai, atau pemborosan memori sebagai akibat dari pointer-pointer dengan alamat yang salah, karena disini, di Java, tidak-pernah-ada yang namanya pointer.