Salah Kaprah Mengenai Memory Dan Batere Pada Blackberry



Membersihkan log tidak akan membuat memori bertambah banyak atau membuat BB menjadi lebih cepat
Fungsi memori cleaner di BB bukan untuk meningkatkan free memory
Aneka program memory booster tidak membantu membersihkan/membebaskan memori, bahkan akan menggunakan memori dan menguras batere.
Dengan menggunakan engineering screen (escreen) Anda akan bisa mengetahui aplikasi mana yang memakai banyak RAM dan CPU

Buat Anda yang bertanya-tanya: mengapa baru menulis hal ini sekarang? Saya baru menggunakan Blackberry sekitar 2 bulan ini, dan selama 2 bulan ini saya sudah mempelajari sangat banyak mengenai Blackberry. Selama dua bulan ini saya sudah:

Memprogram 7 Aplikasi.
Mempelajari berbagai fitur Blackberry, dari mulai shortcut sampai Engineering Screen
Mempelajar berbagai tools Blackberry seperti cfp.exe, JavaLoader.exe, dsb
Mempelajari reverse engineering modul Blackberry dari situs ini dan ini. Tapi source code yang diberikan keduanya ternyata memiliki banyak bug, jadi saya sekalian mempelajari format internal file COD agar dapat mengkoreksi programnya.

Saya bisa mempelajari itu dalam waktu relatif cepat, karena saya memiliki background dalam reverse engineering dan kernel programming.

Dari hal-hal yang telah saya pelajari tersebut, ada beberapa hal yang ingin saya tuliskan. Kali ini saya ingin membahas mengenai salah kaprah mengenai memori dan batere Blackberry. Sekaligus saya mengumumkan bb-meter versi 1.1 yang merupakan hasil dari pembelajaran saya.

Dari berbagai blog dan mailing list yang saya baca, kebanyakan user Blackberry sangat terobsesi dengan jumlah free memory dan ketahanan batere. Dari hasil membaca beberapa blog dan arsip mailing list, ada beberapa salah kaprah tentang tips memori dan batere. Berikut ini beberapa salah kaprah yang saya temukan:

Membersihkan Event Log (dengan Alt-LGLG lalu memilih “Clear Log”) tidak akan mempercepat Blackberry Anda. Ukuran Event Log di Blackberry hanya 16 kb. Jika ada event baru yang harus dicatat, maka log lama akan dihapus. Ini penjelasan dari API Blackberry: The log itself is 16 KB in size; each log entry uses 15 bytes for overhead, plus whatever space is used by the entry’s actual data. Once the log meets or exceeds the 16 KB size, old entries will get erased as required to fit in the new entries..

Alokasi memori untuk log ini terpisah dari memori untuk data dan aplikasi, jadi ini tidak akan mempengaruhi free memory Anda. Andaikan berpengaruh pun, tidak akan lebih dari 16 kb. Memori sebanyak 16 kb paling-paling hanya sebanyak 10 email, atau bahkan kurang dari 1 foto yang dikirim oleh teman Anda. Lalu untuk apa ada Event Log? Kegunaan Event Log adalah untuk mencari aplikasi yang bermasalah dan mendebug aplikasi ketika Anda sedang membuat program. Detailnya agak sulit dijelaskan bagi non-programmer. Untuk singkatnya: Event Log ini tidak perlu disentuh.

Lalu berikutnya adalah *Fungsi memory cleaning*. Fungsi memory cleaning bukan untuk meningkatkan free memory, tapi untuk masalah security. Semua data yang Anda masukkan (misalnya password), akan disimpan sementara di memori. Jika misalnya device Anda dicuri, maka ada kemungkinan data sementara yang tersimpan ini bisa dibaca dengan software (atau hardware khusus). Untuk meningkatkan keamanan, data-data penting yang disimpan sementara di memori bisa ditimpa. Jadi opsi memori cleaning sama sekali tidak akan menambah free memory.

Berikutnya adalah program memory booster, semua jenis program tersebut tidak berguna untuk BB Anda. Anda juga akan menemui program semacam ini untuk OS Windows, dan itu juga tidak berguna. Kalau tidak percaya, Anda bisa membaca artikel The Memory-Optimization Hoax tulisan karya Mark Russinovich (seorang pakar yang menulis banyak buku mengenai kernel Windows). Pendapatnya mengenai memory cleaner di Windows adalah “At best, RAM optimizers have no effect, and at worst, they seriously degrade performance.”. Saya memiliki pendapat yang sama mengenai memory optimizer di Blackberry.

Blackberry memakai implementasi Java yang sesuai dengan spesifikasi dari Sun (hal ini bisa dilihat di halaman about device bb Anda). Pertama perlu saya jelaskan bahwa di Java, memori diatur otomatis oleh virtual machine. Sebuah program tidak bisa membuang memori yang sudah tidak dipakainya. Memori yang tidak dipakai ini akan menjadi “sampah” untuk sementara waktu, sampai dipungut oleh yang namanya garbage collector. Garbage collector akan membersihkan memori di saat-saat tertentu (biasanya saat idle, atau jika memori sudah terlalu penuh). Proses pembersihan ini bisa makan waktu beberapa detik sampai beberapa puluh detik, oleh karena itu pembersihkan tidak perlu sering dilakukan (menganggu user, dan proses pembersihan akan memakan batere).

Sebelumnya perlu dijelaskan bahwa Blackberry memiliki RAM (sifatnya sama seperti di komputer, untuk eksekusi program), dan juga memiliki flash memory (sifatnya seperti harddisk). Flash memory ini digunakan untuk berbagai hal: untuk swap (artinya objek yang tidak muat di RAM bisa sementara disimpan di sini), untuk menyimpan kode program (semua program yang Anda install masuk ke flash), untuk menyimpan data program (mail, sms, dsb), dan untuk menyimpan file biasa. Jika Anda melihat “Free Memory” ketika Anda tekan Alt-Shift-H, atau yang ditampilkan di bbmeter/MeterBerry adalah jumlah memori “Flash”, bukan “RAM”. RAM sangat berfluktuasi, sehingga biasanya tidak ditampilkan.

Sebuah program bisa “memaksa” virtual machine agar pembersihan memori saat itu juga (atau mungkin lebih tepatnya “memohon”, karena belum tentu akan dilakukan). Ini biasanya dilakukan jika program sudah tahu bahwa dirinya akan membuang banyak memori, dan akan memakai banyak memori baru. Contohnya jika program video akan menutup file video besar, lalu akan membuka file video lain. Di sini program tahu bahwa user akan maklum jika membuka file video akan membutuhkan waktu lama, jadi program bisa dengan bijaksana meminta sistem agar segera membersihkan sampah yang ada. Proses ini dilakukan dengan memanggil method “gc” di kelas “System”, atau lebih singkatnya akan saya sebut dengan “System.gc()”.

Ketika System.gc dipanggil, pertama Blackberry akan mencoba membersihkan dulu RAM, lalu akan melakukan garbage collection terhadap isi flash yang tidak lagi digunakan .

Program memory booster manapun yang Anda pilih hanya akan melakukan satu hal: memanggil “System.gc()”. Ini adalah satu-satunya fungsi yang bisa dipanggil oleh program untuk melakukan managemen memori di Blackberry. Sebagian program bahkan menampilkan tulisan “Defragging”, “Optimizing”, dsb. Padahal sementara itu, program tidak melakukan apa-apa sama sekali (ya, saya sudah membongkar berbagai program untuk meyakinkan hal tersebut). Anda kadang akan melihat bahwa setelah Anda memanggil fungsi defrag, maka memori bisa sedikit bertambah (biasanya beberapa kilobyte, kadang sampai ratusan kilobyte). Tapi sebenarnya jika Anda tidak melakukan apapun, memori memang akan turun sendiri ketika sedang idle. Tidak percaya? coba gunakan program bb-meter atau MeterBerry untuk melihat log memori. Setelah Anda memakai salah satu program tersebut selama beberapa jam, lihatlah bahwa kadang-kadang memori bisa tiba-tiba bisa otomatis menjadi free.

Beberapa program sangat menyesatkan dengan berbagai claimnya. Salah satu program yang cukup jujur dalam klaimnya adalah MeterBerry. Di websitenya tertulis “Note: It is recommended that the Recover Memory feature is used sparingly, as initiating the garbage collector excessively will not provide any added benefit and only consume battery life.” Perhatikan bahwa dengan jelas dinyatakan agar fungsi itu tidak sering-sering digunakan karena tidak ada efeknya dan bahkan akan banyak menggunakan batere.

Program-program booster yang berjalan di latar belakang hanya akan memakan batere, dan program itu sendiri memakan memori. Biasanya semakin kelihatan meriah atau cantik, semakin banyak memori yang digunakan oleh program. Beberapa program membutuhkan puluhan hingga ratusan kilobyte hanya untuk menampung gambar animasi, ikon, dan data log memori sebelumnya.

Ada lagi kelemahan pemanggilan “System.gc()” dari sisi teknis, yaitu dalam hal pembersihan WeakReference. Begini penjelasan sederhananya: di Java, kita bisa menyimpan (meng-cache) objek hasil komputasi (misalnya hasil pencarian terakhir, atau hasil perhitungan tertentu), dan menandainya sebagai data yang boleh di hapus. Artinya kalau sistem masih punya RAM kosong, tolong data ini disimpan, tapi kalau tidak punya, ya silakan dibuang, nanti bisa dibuat lagi datanya (pencarian diulangi, atau komputasi diulangi). WeakReference banyak digunakan dalam OS Blackberry (ini saya ketahui dari reverse engineering), dari mulai aplikasi BBM, browser, dsb.

Nah sekarang masalahnya adalah: ketika System.gc() dipanggil, maka semua WeakReference akan dihapus. Hasilnya adalah free RAM bisa lebih banyak (tapi free flash memory belum tentu lebih banyak), tapi nanti semua aplikasi akan melakukan komputasi ulang, dan akhirnya akan memakan batere lebih banyak. Di Java versi desktop, ada Soft Reference yang sifatnya lebih baik untuk cache (tidak akan langsung digusur oleh System.gc()), tapi ini tidak tersedia di CLDC (sederhananya: Java untuk mobile, termasuk yang dipakai Blackberry).

0 komentar:

Posting Komentar