IP Komputermu ^^^ Browser pakek apa Lo dan OS-Mu^^^^

Selasa, 28 Agustus 2012

Salah Kaprah Mengenaii Memory dan Batere Blackberryy

Buat yang malas membaca detail teknis yang panjang, isi singkat posting ini adalah:

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


 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).

Jumlah RAM yang bebas belum tentu berpengaruh pada kecepatan. Di Linux, semua RAM bebas sebisanya akan digunakan untuk diisi dengan cache disk, supaya akses ke disk terasa lebih cepat. Tapi ketika ada aplikasi yang butuh memori, cache tersebut bisa langsung dibuang. Chip RAM (biasanya static RAM) membutuhkan energi yang konstan, tidak peduli apakah 50% terpakai atau 100% terpakai. Justru yang seharusnya diinginkan user seharusnya RAM dipakai semaksimal mungkin, agar tidak perlu melakukan komputasi ulang yang membutuhkan energi ekstra (atau akses ke flash/SD card yang membutuhkan energi ekstra).

Karena mengetahui keterbatasan System.gc dan bahwa membersihkan log itu tidak berpengaruh, maka saya tidak memberikan fitur itu di bb-meter. Padahal fungsi-fungsi tersebut dapat ditambahkan hanya dengan menambah beberapa baris kode program.

Kalau semua itu salah kaprah, lalu apa yang benar? Anda bisa membaca sendiri apa yang berpengaruh untuk free memory di dokumen resmi dari Blackberry. Secara singkat, hal yang berpengaruh adalah: gunakan media card untuk penyimpanan file media, hapus program yang tidak perlu, hapus pesan/file/gambar lama, bersihkan cache browser, gunakan email versi teks (jangan HTML).

Bagaimana kita bisa tahu bahwa program memakan banyak memori atau memakan banyak CPU? Di Linux atau OS X, Anda bisa menggunakan program top. Sayangnya Blackberry tidak menyediakan tool yang bisa diakses dengan mudah. Salah satu cara yang bisa dilakukan oleh user biasa adalah dengan menggunakan “Engineering Screen”. Seseorang telah menemukan caranya masuk ke engineering screen ini, tapi sayangnya orang ini hampir dituntut RIM, dan terpaksa menurunkan programnya dari situsnya. Namun demikian sudah banyak yang menyalin kodenya, dan Anda bisa menemukan tool “escreen generator” ini di mana-mana. Saya tidak akan menunjukkan linknya (daripada bermasalah), tapi Anda bisa mencarinya sendiri di Google.





 Fungsi engineering screen ada banyak, tapi saat ini saya hanya ingin membahas mengenai “JVM Engineering Screens”. Melalui menu tersebut, Anda bisa melihat program-program yang berjalan. Di OS baru akan ada menu untuk menampilkan “Total CPU”, “Top Allocs”, “Total Allocs”, dsb (kalau tidak salah mulai 5.0 ke atas, yang jelas di 4.5 menu-menu tersebut belum ada). Saya tidak akan menjelaskan semuanya, hanya “Total CPU”, “Heap Size” dan “Total Heap” saja. Catatan: program dengan nama awalan “net_rim_” adalah bawaan Blackberry.






 Secara singkat, mengetahui program mana yang memakan banyak memori akan membantu kita mengoptimasi memori, dan mengetahui program mana yang memakan banyak CPU akan mengoptimasi pemakaian batere.

Pertama saya akan membahas tampilan “Heap Size”. Heap size adalah RAM yang dipakai oleh program saat ini. Jika program memakai banyak RAM, maka lama kelamaan RAM tidak cukup, dan objek-objek yang jarang diakses akan dimasukkan ke flash memori. Jika ada banyak program serupa, carilah yang pemakaian RAMnya paling sedikit. Misalnya program untuk LED ada banyak (BeBuzz, BerryBuz, Blink, dsb), Anda bisa melihat sendiri yang mana yang pemakaian RAMnya lebih sedikit. Jika RAM yang dipakai program tersebut tidak banyak, maka RAM akan tersedia untuk aplikasi lain.

Berikutnya adalah “Total Alloc”. Selama program berjalan, program akan mengalokasikan dan (secara implisit) mengembalikan memori ke sistem operasi. Angka-angka di sini bisa sangat besar, tapi biasanya tidak berarti banyak. Misalnya program email akan mengalokasikan memori tiap kali membuka email, tapi memori itu akan dibuang lagi ketika Anda membuka mail berikutnya. Nah semua permintaan alokasi akan ditotal, dan hasilnya bisa dilihat di sini. Angka yang tercantum di sini hanya menunjukkan seberapa aktif suatu program meminta dan melepaskan memori.

Setelah membahas memori, berikutnya saya akan membahas CPU. Sebagian besar waktu yang dihabiskan oleh Blackberry adalah idle. Meskipun Anda sedang aktif memakai, misalnya chatting, hanya sedikit sekali waktu yang dilakukan untuk memproses ketikan Anda dan menerima pesan dari orang lain. Jadi dalam suatu waktu, CPU yang digunakan oleh sebuah proses sangat sedikit (dalam hitungan mikro atau milli second). Jadi melihat jumlah CPU saat ini sangat sulit dilakukan (karena program akan bekerja beberapa millisecond, lalu idle lagi). Yang bisa dilakukan, dan yang lebih masuk akal adalah berapa jumlah “Total CPU” yang dipakai program. Program yang komputasinya berat biasanya akan memakai banyak CPU, dan biasanya memakai banyak batere. Total CPU adalah jumlah waktu oleh sebuah program Sejak Blackberry Anda hidup. Semakin besar CPU-nya berarti semakin aktif program tersebut, dan biasanya semakin banyak batere yang digunakan. Saya katakan biasanya, karena ada beberapa perkecualian, misalnya program kamera bisa memakai sedikit CPU tapi memakai banyak energi batere untuk flash.

Sebagai pengguna, yang bisa dilakukan dari informasi-informasi tersebut adalah: menguninstall/mengganti program yang memakai banyak CPU dan/atau memakan banyak RAM. Sebagai programmer, Anda bisa mengoptimasi program Anda supaya memakan lebih sedikit memori dan menggunakan lebih sedikit CPU.

Setelah saya mengetahui mengenai penggunaan memori dan CPU, sayapun mengecek penggunaan memori dan CPU bbmeter. Sebagai program yang tujuannya mengetahui pemakaian batere (agar bisa menghemat), dan mengetahui penggunaan memori, maka seharusnya program bbmeter memakai CPU sangat sedikit, dan memakai memori sangat sedikit. Ternyata di versi 1.0 penggunaan CPU BB meter sudah sangat rendah (dibandingkan meterberry), namun penggunaan RAM-nya sangat tinggi karena saya menciptakan ikon baru setiap kali status batere berubah. Menurut teori, seharusnya ikon lama akan dihapus otomatis setelah diganti ikon baru, namun ternyata hanya sebagian memori saja yang dihapus. Lama kelamaan memori ini akan menumpuk.

Setelah mengetahui hal tersebut, saya mengoptimasi agar bbmeter memakai CPU yang lebih sedikit lagi, dan juga memakai memori yang lebih sedikit lagi. (Sekarang Anda bisa mendownload bb-meter versi 1.1 dari URL http://compactbyte.com/bb-meter/.

Berikut ini tampilan heap size MeterBerry







 Dan berikut ini tampilan BBMeter yang telah dioptimasi. Sebagai catatan: pemakaian memori bisa naik sampai 100kb, tapi akan turun lagi. Alokasi akan terjadi untuk update ikon ketika level batere bertambah/berkurang, atau ketika charger dicolok. Setelah beberapa saat, ini akan turun lagi.


 Kesimpulannya: kemungkinan besar hal-hal yang Anda lakukan tidak memperbaiki penggunaan memori dan/atau batere, dan aplikasi-aplikasi yang Anda install justru mengurangi memori dan/atau batere. Saran saya: uninstall aplikasi background yang jarang Anda lihat. Bahkan jika Anda jarang memperhatikan informasi batere, program seperti meterberry atau bbmeter diuninstall saja, dan installah ketika dibutuhkan. Misalnya ketika Anda membeli batere baru, ketika membandingkan dua batere, atau ketika mencoba hybrid baru. Ketika membandingkan beberapa aplikasi gunakan Engineering Screen untuk mengecek pemakaian memori dan CPU-nya.














sumber: http://blog.compactbyte.com/2010/11/01/salah-kaprah-mengenai-memory-dan-batere-blackberry/



Tidak ada komentar:

Posting Komentar