Pentingnya melepaskan object tak terpakai di Java

Sesuai tulisan sebelumnya, disini kita akan membahas pentingnya melepaskan object yang sudah tidak dipakai.

Kita buat dulu program sederhana untuk mengakses database MySQL secara berulang ulang, disini hanya ditampilkan sebagian source code saja. Source Code pertama adalah Source Code yang tidak melepaskan object yang telah tak terpakai. Berikut Source Codenya :

Connection connection;

int hasil = 0;

while(true){

try {

// TODO code application logic here

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

String url = "jdbc:mysql://localhost:3306/achmadlutfi";

String user = "root";

String password = "";

connection = DriverManager.getConnection(url, user, password);

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery("SELECT COUNT(*) AS hasil FROM arfa_inbox");

if(resultSet.next()){

hasil = resultSet.getInt("hasil");

}

System.out.println("Hasilnya adalah : "+hasil);

} catch (SQLException ex) {

Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);

}

try {

Thread.sleep(1000);

} catch (InterruptedException ex) {

Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);

}

}

Kemudian kita lakukan Profiler pada program tersebut dengan menggunakan fasilitas Profiler yang ada di Netbeans.  Kita lihat grafik penggunaan memory pada gambar berikut :

VM Telematry

VM Telemetry

Dari gambar diatas kita tahu penggunaan memory program sederhana kita cukup besar, padahal program yang kita buat masih sangat sederhana. Bayangkan saja jika program yang kita buat sudah sangat kompleks dan banyak sekali object yang dibuat, tentu saja memory yang dibutuhkan akan semakin besar saja.

Program yang kedua kita lakukan sedikit perubahan pada program, setiap object yang sudah tidak digunakan kita lepaskan dan juga perhatikan dimana object dibuat dan di inisialisasi.

Connection connection = null;

int hasil = 0;

String url = "jdbc:mysql://localhost:3306/achmadlutfi";

String user = "root";

String password = "";

Statement statement = null;

ResultSet resultSet = null;

try {

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

connection = DriverManager.getConnection(url, user, password);

} catch (SQLException ex) {

Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);

}

while(true){

try {

// TODO code application logic here

statement = connection.createStatement();

resultSet = statement.executeQuery("SELECT COUNT(*) AS hasil FROM arfa_inbox");

if(resultSet.next()){

hasil = resultSet.getInt("hasil");

}

System.out.println("Hasilnya adalah : "+hasil);

resultSet.close();

statement.close();

} catch (SQLException ex) {

Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);

}

try {

Thread.sleep(1000);

} catch (InterruptedException ex) {

Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);

}

}

Kemudian kita lakukan profiler pada program kedua, grafik penggunaan memory ditunjukkan gambar berikut ini.

VM Telemetry

VM Telemetry

Dari gambar diatas, dapat kita lihat kalau penggunaan memory pada program kedua lebih baik dari pada program pertama, program kita menjadi tidak rakus memory seperti program pertama. Padahal perubahan yang dilakukan tidak terlalu signifikan, dan tidak merubah alur dari program kita.

, , ,

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: