У меня возникли некоторые проблемы с пониманием, почему этот кодAndroid растровый распределение странность
public class BitmapAllocTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); byte[] b = new byte[20 * 1000 * 1000]; b = null; Bitmap.createBitmap(2500, 2000, Bitmap.Config.ARGB_8888); } }
бросает исключение OutOfMemory на устройстве с пределом 24MB кучи. Если я прокомментирую какое-либо из распределений, он работает нормально. У меня создалось впечатление, что java vm попытается собрать мусор, прежде чем выбросить исключения OutOfMemory.
Я подозреваю, что это связано с андроидом, выделяющим растровые изображения на нативной куче.
Я попробовал ваше предложение, призывающее System.gc() перед выделением растрового, также пыталось поймать ошибку, назвав дс(), а затем пытается выделить растровое изображение снова. Я все равно получаю ошибку OOM. :( – Viktor
вы можете показать мне, как вы называете, и повторите его – WarrenFaith
байт [] Ь = новый байт [20 * 1000 * 1000];? б = NULL; System.gc(); попытка { Bitmap.createBitmap (2500, 2000, Bitmap.Config.ARGB_8888); } задвижка (OutOfMemoryError е) { System.gc(); Bitmap.createBitmap (2500, 2000, Bitmap.Config.ARGB_8888); } – Viktor