æè¿ã®Androidäºæ ã«å¯¾å¿ãããOutOfMemoryErrorãç¥ããçºè¡¨ã¹ã©ã¤ããå ¬éãã¾ãã
横æµAndroid and ã¢ãã¤ã«OS ãã©ãããã©ã¼ã é¨ã§çºè¡¨ããè³æã§ãã
è³æã¯Androidã¢ããªéçºè ãã¿ã¼ã²ããã«ã¾ã¨ãã¾ãããOutofMemoryErrorã®çºçåçã¨ã¡ã¢ãªç®¡çã«ã¤ãã¦ææ°äºæ ãå å³ãã¦ã¾ã¨ãã¾ãã(æ°çããªã®ã¯Android 1.xã®ããã®çºè¡¨ãå¤ãã®ã«ã¾ã åç §ããã¦ãããã§ããããã«ææ°äºæ ã«åããã¦æ´æ°ãããã£ãã®ã§ã)ã
Androidã¢ããªã«ãããã¡ã¢ãªäºæ ã¯(åæã«æ¯ã¹ãã)æ¹åãã¦ãã¾ãããOpenCVãªã©ç»åå¦çã®éè¦ãé«è§£å度対å¿ãè¸ã¾ããã¨ä¾ç¶ã¨ãã¦ååã¨ã¯è¨ããããã¦ã¼ã¹ã±ã¼ã¹ãããã¾ãããããªä¸ã§ã¡ã¢ãªè³æºããã¾ã使ãããã®ææ¨ã¨ãªãã°å¹¸ãã§ãã
è³æã«ãããéãæ¸ãããã®ç¶æ ã§ãã®ã§ã³ã¡ã³ããmentionãªã©ããããªæ å ±ãããããæ¸ãå ãã¦ãããã調ã¹ã¦ããããããã®ãããããããããééãã¦ãï¼ãã¨ãããæè¦ããã ããã°å¬ããã§ãã
å°ãè£è¶³ã§ãã
Android 3.x以éãBitmapã®èªã¿è¾¼ã¿ã«JavaHeapãå©ç¨ããããã«ãªã£ããªã©ä¸ææã«æ¯ã¹ã¦ã¡ã¢ãªä½¿ç¨éã®è§£æã¯è¡ãããããªã£ã¦ãã¾ãããããã¦ã¿ãã¨Bitmap#recycle()ãªã©ãä¸å±¤é ¼ãããããããã«è¦ããã®ã§ãããèªåçã«è¡ãããã¨ãã£ã¦ãã¡ã¢ãªã®è§£æ¾/確ä¿ã«ã¯ãããªãã®æéããããã¾ããããã©ã¼ãã³ã¹çã«å³ããARç³»ã ã¨ã¤ãã¿ãå¢ãããããã¾ããã
LargeHeapãããæ«ãããã¨(Android 4.xã®ã·ã§ã¢ã伸ã³ã¦)ã¡ã¤ã³ã¹ããªã¼ã ããã¹ã¦ã«ãã¼ã§ããããã«ãªãã°ç»åå¦çãªã©ã«ä¾¿å©ã§ããããããæå¤§ã¡ã¢ãªãµã¤ãºãå¢ããã ãã§ã¡ã¢ãªã®æ¡å¼µæ®µé(ã¾ã Maxã«å°éãã¦ããªãç¶æ )ã§ã¯ä½¿ãåã£ããé½åº¦GCãæ°ããã¡ã¢ãªã確ä¿ããã¾ã§å¾ ããã°ãªãã¾ããï¼JavaHeapã使ãåãã°é½åº¦ãGCãããã¡ã¢ãªã«ç©ºãã¯ãªãããï¼ã¨ç¢ºèªããã®ã§æéçãã¡ãªãããããï¼ã
å½ç¶ãªãã確ä¿ã¡ã¢ãªãå¢ããã°å¢ããã»ã©GCã«æé(ã¹ãããã»ã¶ã»ã¯ã¼ã«ãã®æéãé·ããªã)ããããã¾ãã
ããã«ã³ã³ã«ã¬ã³ãGCã«ãªã£ã¦ããã¯ç©æ¥µçã«GCãèµ°ã(ãã¡ããããã¯ã°ã©ã¦ã³ãã§ã¢ããªã¨ä¸¦è¡ãã¦ãã§ãã)ãã«GCã®é ã«æ¯ã¹ã¦System.gc()ã®å è·ãèããªã£ã¦ãã¾ãã
JNIçµç±ã§native層ã«ããã¦ã¡ã¢ãªã確ä¿ããã®ãä¸ã¤ã®æç«ã¦ã§ãããããNativeã¨Javaã®ãã¤ããªããã¡ã¢ãªç®¡çã¯ãã¢ããªãä½ãããã®ãã¡ã¢ãªç®¡çããããã®ãåãããªããªãã»ã©ãããã©ãããã§ã(å°ãªãã¨ãJavaã§å®çµãã¦ããã¨ãã»ã©æ°è»½ã§ã¯ãªã)ã
è³æã§ã¯æ¸ãããã¦ãã¾ããã§ãããç¾å¨ãã¡ã¢ãªãã£ãã·ã¥ã«ã¤ãã¦ã¯SoftReferenceã§ã¯ãªãLruCacheã主æµã«ãªã£ã¦ãã¾ããAndroid 2.3ç³»ã§ã³ã³ã«ã¬ã³ãGCãæ¡ç¨ãããããããã®æµãã§ãLruCacheã¯ã©ã¹ã¯v4 Support Libraryã使ãã°Android 1.6(!)ã¾ã§ããã¯ãã¼ãããã¦ã¾ãã®ã§ä½¿ããªãæã¯ãªãã§ããã
ã¢ããªã±ã¼ã·ã§ã³ã®ãã¥ã¼ãã³ã°ã§ã¯OOMã®çºçã¨GCã«ããããã©ã¼ãã³ã¹ä½ä¸ãã»ããã§è¨ããããã¨ãå¤ã(æ°ããã)ã®ã§ã¡ã¢ãªé£ãã®ã¢ããªãä½ãå ´åã¯é ã®çãåé¡ã§ãã
Webã調ã¹ã¦ãã©ã®Androidãã¼ã¸ã§ã³ãã¿ã¼ã²ããã«ããè¨äºããããããéµåã¿ã«ã§ããªãæããããã¾ãï¼æ
å ±ãå¤ããªã£ã¦ãã¾ã£ã¦ãããªã©â¦ï¼å度ããã¹ããã©ã¯ãã£ã¹ãéãã¦ãããã仿¥ãã®é ãã¨ããã£ã¦è³æãä½ãã¾ãã(ãããã§ã«è¶³ããªãæ
å ±ããã£ãã®ã§è£è¶³ããæ¬¡ç¬¬ã§ãâ¦)ã