Android的虚拟机总内存的最大内存
我需要的内存大的量,我尝试测试:Android的虚拟机总内存的最大内存
long max = Runtime.getRuntime().maxMemory();
long available = Runtime.getRuntime().totalMemory();
long free = Runtime.getRuntime().freeMemory();
AssetManager manager = getApplicationContext().getAssets();
ArrayList<Bitmap> list = new ArrayList<Bitmap>();
for (int i = 0; i < 34; i++) {
try {
Bitmap btm = BitmapFactory.decodeStream(manager.open("image.png"));
list.add(btm);
} catch (IOException e) {
e.printStackTrace();
}
Log.d("Total ", Runtime.getRuntime().totalMemory()/1024f/1024f + "");
Log.d("Free ", Runtime.getRuntime().freeMemory()/1024f/1024f + "");
}
//dont let vm to clear bitmaps
for (Bitmap object : list) {
object.setDensity(Bitmap.DENSITY_NONE);
}
Log.d("Total ", Runtime.getRuntime().totalMemory()/1024f/1024f + "");
Log.d("Free ", Runtime.getRuntime().freeMemory()/1024f/1024f + "");
我测试了这一点,它抛出内存溢出(VM不能让为这个应用程序分配超过5 MB)
设备(例如烧火)最大= 64 MB,总= 5MB免费2.3 MB和,如果我使用更多然后5 MB(总存储器)VM力接近上。 是否有可能增加VM堆大小MaxMemory(64)?
你好,你需要去Android虚拟设备管理器(AVD管理器),然后单击编辑那里你可以更改内存大小,从而可以使运行您的应用空间。
我认为你的问题是因为你创建你不是在你的循环for循环这么多的位图。有一点肯定的是Android的设计,该内存可以精确地处理这样的方式。既然你使用的是位图列表,这并不意味着你将需要巨大的内存。您可以回收您的位图或创建缩放的位图,这将降低堆内存从而减少你的力接近的机会。
for (int i = 0; i < 34; i++) {
try {
Bitmap btm = BitmapFactory.decodeStream(manager.open("image.png"));
list.add(btm);
} catch (IOException e) {
e.printStackTrace();
}
Log.d("Total ", Runtime.getRuntime().totalMemory()/1024f/1024f + "");
Log.d("Free ", Runtime.getRuntime().freeMemory()/1024f/1024f + "");
}
在for循环加,btm.recycle();
for (int i = 0; i < 34; i++) {
try {
Bitmap btm = BitmapFactory.decodeStream(manager.open("image.png"));
list.add(btm);
btm.recycle();
btm=null;
} catch (IOException e) {
e.printStackTrace();
}
Log.d("Total ", Runtime.getRuntime().totalMemory()/1024f/1024f + "");
Log.d("Free ", Runtime.getRuntime().freeMemory()/1024f/1024f + "");
}
这只是你一个建议可以在最优化的方式使用的内存。
并回答你的问题需要大量的内存 android不允许它。每个应用的可用内存因设备而异。如果你在这里尝试我的建议会更好。
不,image.png只有30 kb,34x30 kb只有7 MB,为什么VM不让我分配7MB? maxmemory是64 MB ... – Androider 2012-02-06 13:18:35
但在运行时每个应用程序都受到限制。你说的总内存可能是64.我f和ororid需要内存,它会杀死可能正在运行的后台应用程序。 – 2012-02-06 13:23:05
我正在编写的应用程序将工作在我需要模拟器的所有设备上? 0.o – Androider 2012-02-06 07:20:31