RSS

Tag Archives: memory

What is Dalvik VM Heapsize? benefits and downfalls?

Google Recommended that application developers make applications with a target of 16m heap for platforms.

It’s not “virtual memory,” it’s real memory. This setting is simply the maximum amount of heap space (read: memory) a single instance of the Dalvik VM (read: application) can obtain.

The only scenario where it would be beneficial to increase the maximum heap size would be if you have an application that is very close to using up all of its available heap space, which would force it to run garbage collection frequently, which would use up CPU cycles. It is possible that lowering the maximum heap size could be beneficial in that it might prevent an application from obtaining more memory than it needs (by forcing it to garbage collect sooner), but that all depends on how the Dalvik VM is implemented and is really beyond my knowledge.

It is the memory allocated to the dalvik virtual machine increasing it will use more memory if the apk calls for it and decreasing will use less,but go into garbage quicker thus making the apk perform less efficiently. This has to do with reading java code increasing the dalvik.vm will probably make no noticeable differences.

Actually, I would suggest bumping up VM heap space to maximum because it reduces GC runs to only when strictly necessary – and *any* GC algorithm is costly. In short, at the expense of little memory (that you wouldn’t be using anyway) you get applications that perform smoother plus lower battery usage.

Apa itu dalvik heapsize? Apa kegunaannya?

Dalvik Heapsize adalah besarnya memory yg dialokasikan ke Dalvik VM yg digunakan pada saat APK dipanggil/dijalankan.

Google menyarankan bagi pengembang aplikasi Android untuk memakai dalvik.heapsize=16m.

Jangan dianggap bila Dalvik HeapSize ini sebagai “VirtualMemory”, sebab, inilah memory sebenarnya.
Karena Dalvik VM memperoleh pasokan memory dari sini untuk setiap instancenya (baca : Aplikasi).

Skenarionya adalah, meningkatkan nilai heapnya, maka alokasi memory utk dipakai sebuah aplikasi semakin meningkat. Menurunkan nilai heapnya, maka alokasi memory utk sebuah aplikasi menjadi berkurang.

Ada kemungkinan bahwa menurunkan nilai maximum heap dapat bermanfaat dalam hal mencegah aplikasi mendapatkan memori lebih dari yang dibutuhkan (dengan memaksa mengumpulkan sampah lebih cepat), tapi itu semua tergantung pada bagaimana VM Dalvik dilaksanakan

Dan jika sebuah aplikasi membutuhkan alokasi heap dalvik yang banyak, sementara tersedia sedikit,
maka akan mengecek di GC (“tumpukan sampah”) atau file “cache” apk tersebut, sehingga membuat APK melakukan aktivitasnya menjadi kurang efisien. Namun, ada manfaatnya ketika nilai heap ini diset minimum atau sedikit dan tumpukan sampah/cache yang tersedia cukup besar, tentunya aplikasi berjalan menjadi lebih smooth dan penggunaan daya batere menjadi efisien.

Peningkatannya tentu meningkatkan performance, karena mengurangi GC berjalan hanya bila sangat diperlukan – dan * setiap * algoritma GC adalah sangat berharga, dan hal ini tidak terlihat perbedaan yang mencolok atau nyata, hanya dari segi VMnya saja. Namun di sisi lain, penggunaan daya batere jadi meningkat.

 

 
1 Comment

Posted by on September 22, 2011 in Android

 

Tags: , , , , , , , , ,

[Tips for Android Developer] Move your applications to External Storage (SDcard)

Many android users have a big problem with disk space. Every Applications on the device should be installed on the device’s internal memory.

But, in Froyo and above allows you to install application on the external storage (SD Card), but if only the developer actually enables that feature in his application.

According to the http://developer.android.com/guide/appendix/install-location.html, developer can set his application’s install location to the external storage by set android:installLocation attribute with a value of “auto” or “preferExternal” in the <manifest> element.

How about usual or ordinary users?

Yeah, it’s easy to do that with command prompt or terminal window and of course, you need ADB Tools (or Android SDK).

  1. Please, make sure that you enabled “USB debugging” mode on your phone.
  2. You need the Android SDK or ADB tools. Please install it to your computer.
  3. Connect your phone to a USB port, open up a terminal window (command prompt), and type “adb shell pm setInstallLocation 2” (without the quotes). (ADB is part of the Android SDK.
    This will enable the move to SD card option for all applications.)
  4. Now, press menu button, go to the Settings menu > Applications menu and move your apps to your SD card.
  5. To restore this setting back to default type “adb shell pm setInstallLocation 0“.

Done! 😀
You’ve got the point of success with this. And enjoy your applications..they should be stored on the sd card. 🙂

 
Leave a comment

Posted by on September 16, 2011 in Android

 

Tags: , , , , , , , , , , ,

Masalah Android, Memory dan Bitmap

“Ngoding” adalah hal yang mengasyikkan bagi kalangan programmer 😀
Tentunya yang menghasilkan hehe.

Namun secara tidak sadar, kadang kita tidak begitu memperhatikan bagaimana keterbatasan resource (memori, ukuran layar, dan bandwidth)

Mengabaikan hal tersebut, tentu akan berakibat pada kekecewaan pada pengguna aplikasi kita.

Mengingat pengguna aplikasi itu memiliki berbagai macam perangkat dan model yang berbeda-beda (dengan memory, ukuran layar dan bandwidth yang berbeda pula), khususnya perangkat mobile atau gadget.

Jika kamu telah banyak menghabiskan waktu dengan Android SDK bawaan Google, mungkin sudah mencoba mempraktekan membaca file JPEG ke dalam Bitmap menggunakan function Media.getBitmap. Sudah bisa dipastikan pasti ketemu masalah error :

bitmap size exceeds VM budget

Apa itu?

Ketika saya menarik analogi hal yang berbeda, yaitu pada PHP, mungkin sudah pernah mengotak-atik php.ini, di mana ada memory_limit PHP..yup, kita bakal ngotak-atik itu ketika masalah upload gambar tiba2 muncul pesan error memory size error.

Nah di android, ada file yang serupa dengan php.ini, yaitu build.prop, di situ kamu bisa mengatur memory limitnya, yaitu DalvikVM.heapsize. Di file build.prop juga kita dapat mengatur hal-hal lain, selain memory limit VM ini.

Yak, semua activity app android, bekerja pada Dalvik Virtual Machine ini, dengan bahasa pemrograman Java pada tingkat aplikasi dan bahasa pemrograman C/C++ pada tingkat library.

Namun, alangkah sulitnya, ketika kita mencoba menerapkan “setting vm.heapsize” di berbagai gadget, di mana Aplikasi sebagian besar berjalan pada gadget dengan setting heapsize=16mb.

Akan menjadi kesulitan, jikalau kita mencoba membaca file yang besar dan banyak dalam satu atau dua waktu, yang dihitung-hitung ukurannya lebih besar dari 16mb, bakal muncul pesan kesalahan : bitmap size exceeds VM budget ini.

Dan untuk mengatasi hal tersebut, perlu adanya recycling atau daur ulang “cache” memory, yang membuat kebutuhan akan memory tercukupi dari waktu ke waktu.

Jadi apa yang harus programmer lakukan?

Satu hal yang penting, kita hanya butuh membaca apa yang dibutuhkan dan masuk ke dalam memory. Jikalau file gambarnya besar atau banyak, dalam 1 gambar bertipe JPEG misal 10 MB, dibutuhkan trim/memangkas ukuran/resolusi gambar tersebut ke dalam beberapa bit.

// baca file bitmap
public Bitmap readBitmap(Uri selectedImage) {
Bitmap bm = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
AssetFileDescriptor fileDescriptor =null;
try {
fileDescriptor = this.getContentResolver().openAssetFileDescriptor(selectedImage,”r”);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
finally{
try {
bm = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
fileDescriptor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return bm;
}

Pada function di atas, terdapat sedikit “jamu” buat nge-trim bitmap yang ukurannya besar, menjadi beberapa bagian kecil options.inSampleSize. Mengurangi size gambar menjadi 1/5 dari ukuran aslinya (atau 20% dari ukuran sebenarnya)

🙂

Namun ada hal praktis lain yang bisa dipraktekkan, yaitu “daur ulang” seperti yang saya bilang di atas tadi.

Ketika kita berhubungan dengan Bitmap, tentunya memungkinkan untuk “daur ulang” ini, karena terdapat method recycle() di Bitmap ini.

Apa fungsinya?

Fungsinya yaitu membebaskan memory yang terkait dengan pixel bitmap, dan menandai bitmap tersebut sebagai bitmap yang “mati”, yang berarti tidak akan pernah dipakai lagi ketika function getPixels() atau setPixels() dipanggil.

Hal ini berarti, bitmap yang mati ini bisa diisi sebagai “cache” baru di dalam memory untuk dipakai untuk proses Bitmap berikutnya. 😀

Contohnya sebagai berikut :

public static void clearBitmap (Bitmap bm) {

bm.recycle ();

bm = null;

System.gc ();

}

Beberapa kasus juga membuktikan masalah OOM (Out Of Memory) ini bisa diatasi dengan System.gc(); ini.

System.gc() berfungsi buat nge-cleanup memory //garbage collector, dalam artian sampah-sampah “cache” ini dibersiin oleh System class tersebut.

@Override

public void onLowMemory(){

super.onLowMemory();

ImageLoader.clearCache();

}

Tentunya dengan hal tersebut di atas, masalah VM Budgets ini dapat teratasi 😀

 
1 Comment

Posted by on May 25, 2011 in Android

 

Tags: , , , , , , , , , , ,