Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
AndroidÖеÄÄÚ´æÐ¹Â¶
 
  1803  次浏览      27
 2018-6-5
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn,±¾ÎÄÖ÷Òª´ÓjavaµÄÄÚ´æÄ£Ðͽ²Æð£¬×îÖÕ¾Ù³ö¼¸¸öÄÚ´æÐ¹Â¶µÄÀý×Ӻͽâ¾ö·½°¸¡£

javaÔËÐÐʱÄÚ´æÄ£ÐÍ

¾ßÌåÐÅÏ¢£ºhttp://gityuan.com/2016/01/09/java-memory/

»ØÊÕËã·¨

JVM»ØÊÕËã·¨Ö÷ÒªÓÐÁ½ÖÖ

1.ÒýÓüÆÊý·¨£ºÃ¿¸ö¶ÔÏóÓÐÒ»¸öÒýÓüÆÊýÆ÷£¬µ±¶ÔÏó±»ÒýÓÃÒ»´Îʱ¼ÆÊýÆ÷¼ÓÒ»£¬ÒýÓÃʧЧ¼ÆÊýÆ÷¼õÒ»¡£µ±¼ÆÊýÆ÷Ϊ0ʱ±íʾ¶ÔÏó¿ÉÒÔ±»»ØÊÕ¡£(ÓÉÓÚÎÞ·¨½â¾öÏ໥ÒýÓÃÎÊÌâ¶ø±»·ÏÆú)

2.¿É´ïÐÔËã·¨£º´ÓGC ROOT½Úµã¿ªÊ¼±éÀú£¬¿ÉÒÔÁ¬Í¨µÄ¶ÔÏó¶¼ÊÇ»î¶ÔÏó¡£ÎÞ·¨µ½´ïµÄ¶ÔÏó¿ÉÒÔ±»»ØÊÕ¡£

¿ÉÒÔ×÷ΪGC ROOT½ÚµãµÄ¶ÔÏó

ÐéÄâ»úÕ»µÄÕ»Ö¡µÄ¾Ö²¿±äÁ¿±íÒýÓõĶÔÏó

±¾µØ·½·¨Õ»JNIÒýÓõĶÔÏó

·½·¨ÇøµÄ¾²Ì¬±äÁ¿ºÍ³£Á¿ËùÒýÓõĶÔÏó

Àý×Ó

public class GCDemo {
public static void main(String[] args) {
GcObject obj1 = new GcObject();
GcObject obj2 = new GcObject();

obj1.instance = obj2;
obj2.instance = obj1;

obj1 = null;
obj2 = null;
}
}

class GcObject {
public Object instance = null;
}

ÒýÓüÆÊý·¨ÄÚ´æÍ¼

1.step1£ºGcObjectʵÀý1µÄÒýÓüÆÊý+1£¬Ä¿Ç°Îª1

2.step2£ºGcObjectʵÀý2µÄÒýÓüÆÊý+1£¬Ä¿Ç°Îª1

3.step3£ºGcObjectʵÀý2µÄÒýÓüÆÊý+1£¬Ä¿Ç°Îª2

4.step4£ºGcObjectʵÀý1µÄÒýÓüÆÊý+1£¬Ä¿Ç°Îª2

5.obj1 = null£ºGcObjectʵÀý1ÒýÓüÆÊý-1£¬Ä¿Ç°Îª1

6.obj2 = null£ºGcObjectʵÀý2ÒýÓüÆÊý-1£¬Ä¿Ç°Îª1

µ½´ËΪֹ£¬GcObjectʵÀý1ºÍ2¶¼ÎÞ·¨Ê¹Ó㬵«ÊÇÒýÓüÆÊý²»Îª0£¬·¢ÉúÄÚ´æÐ¹Â¶¡£

¿É´ïÐÔËã·¨ÄÚ´æÍ¼

ÓÉ¿ÉÒÔ±»×÷ΪGC ROOT¶ÔÏóÀ´¿´£¬ÐéÄâ»úÕ»ÖÐobj1ºÍobj2ÊÇÁ½¸öGC ROOTÆðµã£¬ÓÉÓÚ×îÖÕ¶¼½«obj1Óëobj2ÉèÖÃΪÁËnull¡£Òò´ËGcObject1ºÍ2¶¼ÎÞ·¨¿É´ï£¬Òò´Ë¿ÉÒÔ±»»ØÊÕ¡£

ÔÚJavaÖУ¬ÄÚ´æÐ¹Â©¾ÍÊÇ´æÔÚһЩ±»·ÖÅäµÄ¶ÔÏó£¬ÕâЩ¶ÔÏóÓÐÏÂÃæÁ½¸öÌØµã£¬Ê×ÏÈ£¬ÕâЩ¶ÔÏóÊǿɴïµÄ£¬¼´ÔÚÓÐÏòͼÖУ¬´æÔÚͨ·¿ÉÒÔÓëÆäÏàÁ¬£»Æä´Î£¬ÕâЩ¶ÔÏóÊÇÎÞÓõ쬼´³ÌÐòÒÔºó²»»áÔÙʹÓÃÕâЩ¶ÔÏó¡£Èç¹û¶ÔÏóÂú×ãÕâÁ½¸öÌõ¼þ£¬ÕâЩ¶ÔÏó¾Í¿ÉÒÔÅж¨ÎªJavaÖеÄÄÚ´æÐ¹Â©£¬ÕâЩ¶ÔÏ󲻻ᱻGCËù»ØÊÕ£¬È»¶øËüÈ´Õ¼ÓÃÄÚ´æ¡£

AndroidÖг£¼ûµÄÄÚ´æÐ¹Â¶

AndroidÖÐ×î³£¼ûµÄÄÚ´æÐ¹Â¶ÊǹØÓÚActivityµÄÄÚ´æÐ¹Â©¡£ÆäºËÐÄÎÊÌâÔÚÓÚÔÚActivityÉúÃüÖÜÆÚÖ®ÍâÈÔÓÐÆäÒýÓᣴÓÄÚ´æÄ£ÐͽǶÈÀ´½²£¬ËüÔÚGC ROOTINGʱ¿É´ï£¬µ«ÊÇËüµÄonDestroyÒѾ­±»Ö´ÐС£¼ÈËü´ÓÎÒÃÇÆÚ´ýµÄÐÐΪÉÏÀ´ËµÓ¦¸Ã±»±êʶΪ¿ÉÒÔ±»»ØÊÕ¡£µ«ËüÈÔÈ»¿É´ï¡£ÒÔϾÍÁгö×î³£¼ûµÄ¼¸ÖÖÇé¿ö£¬Çë¼ÇסºËÐÄì¶Ü£ºActivityÉúÃüÖÜÆÚÖ®ÍâÈÔÓÐÆäÒýÓÃ

Handlerµ¼ÖµÄÄÚ´æÐ¹Â©

public class SampleActivity extends Activity {

private final Handler mLeakyHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// ...
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// ÑÓʱ10·ÖÖÓ·¢ËÍÒ»¸öÏûÏ¢
mLeakyHandler.postDelayed(new Runnable() {
@Override
public void run() { }
}, 60 * 10 * 1000);

// ·µ»ØÇ°Ò»¸öActivity
finish();
}
}

˼¿¼ÉÏÃæ´úÂ룬Ëü»á·¢ÉúÑÏÖØµÄÄÚ´æÐ¹Â¶¡£Ê×ÏÈ£¬mLeakyHandler±»ÉùÃ÷ΪÁËÒ»¸öÄäÃûÄÚ²¿Àà(×Ô¼ºË¼¿¼£¬ÉÏÊö´úÂëÓм¸¸öÄäÃûÄÚ²¿Àà)£¬ËüÒþʽµÄ³ÖÓÐÁËÍⲿÀàActivityµÄÇ¿ÒýÓá£Ö®ºó£¬handler·¢³öÁËÒ»¸ö10·ÖÖÓµÄÑÓʱÏûÏ¢£¬½Ó×ÅActivityɱµôÁË×Ô¼º¡£ÎÊÌâµÄ¹Ø¼üÔÚÓÚhandler·¢³öµÄÏûÏ¢Message»áÔÚÏûÏ¢¶ÓÁÐÀï´æiÔÚ10·ÖÖÓ¡£Ëü³ÖÓз¢³öÏûÏ¢µÄhandlerµÄÒýÓ᣶øhandlerÓÖ³ÖÓÐActivityµÄÇ¿ÒýÓá£Õâ¾Íµ¼ÖÂActivityÔÚÆäÉúÃüÖÜÆÚÖ®ÍâÈÔÓÐÇ¿ÒýÓ㬷¢ÉúÁËÑÏÖØµÄÄÚ´æÐ¹Â¶¡£

×¢Ò⣬ÎÊÌâµÄºËÐÄÔÚÓÚÄÚ²¿ÀàÒÔ¼°ÄäÃûÄÚ²¿Àà¶¼»áÒþʽµÄ³ÖÓÐÍⲿÀàµÄÇ¿ÒýÓá£Õâ¾Íµ¼ÖÂÒ»¸öÀàµÄÉúÃü²»ÔÚÓÉÒ»¸öÒòËØ¿ØÖÆ£¬±äΪÁ˶à¸öÒòËØ¡£ÔÚÎÒÃÇÈÏΪ¸Ã½áÊøµÄʱºò¶øÃ»ÓвúÉúÕýÈ·µÄÐÐΪ¡£½â¾öµÄ·½°¸ºÜ¼òµ¥£¬Ò²ºÜͨÓãº

Óþ²Ì¬ÄÚ²¿Àà¡£

ÔÚ¾²Ì¬ÄÚ²¿Àà¸ù¾ÝÐèÇóʹÓÃÈõÒýÓÃÐÞÊÎÐèÒªÒýÓõÄÍⲿÀà×ÊÔ´¡£

public class SampleActivity extends Activity {
/**
* ÄäÃûÀàµÄ¾²Ì¬ÊµÀý²»»áÒþʽ³ÖÓÐËûÃÇÍⲿÀàµÄÒýÓÃ
*/
private static final Runnable sRunnable = new Runnable() {
@Override
public void run() {
}
};

private final MyHandler mHandler = new MyHandler(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// ÑÓʱ10·ÖÖÓ·¢ËÍÒ»¸öÏûÏ¢.
mHandler.postDelayed(sRunnable, 60 * 10 * 1000);

// ·µ»ØÇ°Ò»¸öActivity
finish();
}

/**
* ¾²Ì¬ÄÚ²¿ÀàµÄʵÀý²»»áÒþʽ³ÖÓÐËûÃÇÍⲿÀàµÄÒýÓá£
*/
private static class MyHandler extends Handler {
private final WeakReference<SampleActivity> mActivity;

public MyHandler(SampleActivity activity) {
mActivity = new WeakReference<SampleActivity>(activity);
}

@Override
public void handleMessage(Message msg) {
SampleActivity activity = mActivity.get();

if (activity != null) {
// ...
}
}
}
}

static±äÁ¿µ¼ÖµÄÄÚ´æÐ¹Â©

static±äÁ¿ÔÚ½ø³ÌÆô¶¯µÄʱºò±»·ÖÅäÄÚ´æ¿Õ¼ä¡£ÔÚ½ø³Ì±»É±ËÀµÄʱºòÊÍ·ÅÄÚ´æ¿Õ¼ä¡£Òò´Ë£¬ËüµÄÉúÃüÖÜÆÚÊǹᴩÕû¸öÓ¦ÓõÄÉúÃüÖÜÆÚµÄ¡£Ò²¾ÍÊÇ˵£¬µ±ÄãµÄActivity±»¾²Ì¬±äÁ¿È¾Ö¸µ½¡£ÄÇôÓֻᵼÖÂActivityÔÚÆäÉúÃüÖÜÆÚÖ®ÍâÈÔÓÐÇ¿ÒýÓ㬷¢ÉúÄÚ´æÐ¹Â¶¡£

³£¼ûµÄ³¡¾°ÈçÏ£º

static Context
static View

Á½Õߵı¾ÖÊÊÇÒ»ÑùµÄ£¬ÒòΪViewÄÚ²¿³ÖÓÐContextµÄÒýÓᣵÚÒ»ÖÖ×î³£¼ûµÄ¾ÍÊǵ¥ÀýģʽµÄʵÏÖ£¬½«¾ßÌåµÄActivityµÄContext´«µÝ½øÈ¥¹¹Ôìµ¥Àý¶ÔÏ󣬵¼ÖÂй¶¡£µÚ¶þÖÖÊǵ±ViewÐèÒª¼ÓÔØµÄ×ÊÔ´±È½Ï´óʱ£¬ÏëÒ»ÀÍÓÀÒÝ¡£¶ø²úÉúÄÚ´æÐ¹Â¶¡£

½â¾ö·½·¨ÒÀȻͨÓÃÇÒ¼òµ¥£¬ÔÚActivityÉùÃ÷ÖÜÆÚÍâʹÓÃContext¾¡Á¿È¥Ê¹ÓÃApplicationµÄContext

ActiviityÄÚ²¿ÉùÃ÷µÄ¾²Ì¬×ÊÔ´Òª¼°Ê±ÊÍ·Å£¬ ÔÚÏàÓ¦µÄÉùÃ÷ÖÜÆÚ·½·¨ÖÐ×öºÃÊÕβ¹¤×÷

×¢²áÓë½â×¢²á

ÔÚandorid¿ª·¢ÖУ¬ÎÒÃǾ­³£»áÔÚActivityµÄonCreateÖÐ×¢²á¹ã²¥½ÓÊÜÆ÷¡¢EventBusµÈ£¬Èç¹ûÍü¼Ç³É¶ÔµÄʹÓ÷´×¢²á£¬¿ÉÄÜ»áÒýÆðÄÚ´æÐ¹Â©¡£¿ª·¢¹ý³ÌÖÐÓ¦¸ÃÑø³ÉÁ¼ºÃµÄÏà¹Ø£¬ÔÚonCreate»òonResumeÖÐ×¢²á£¬Òª¼ÇµÃÏàÓ¦µÄÔÚonDestroy»òonPauseÖз´×¢²á¡£

´´½¨Óë¹Ø±Õ

ÔÚandroidÖУ¬×ÊÔ´ÐÔ¶ÔÏó±ÈÈçCursor¡¢File¡¢Bitmap¡¢ÊÓÆµµÈ£¬ÏµÍ³¶¼ÓÃÁËһЩ»º³å¼¼Êõ£¬ÔÚʹÓÃÕâЩ×ÊÔ´µÄʱºò£¬Èç¹ûÎÒÃÇÈ·±£×Ô¼º²»ÔÙʹÓÃÕâЩ×ÊÔ´ÁË£¬Òª¼°Ê±¹Ø±Õ£¬·ñÔò¿ÉÄÜÒýÆðÄÚ´æÐ¹Â©¡£ÒòΪÓÐЩ²Ù×÷²»½ö½öÖ»ÊÇÉæ¼°µ½DalvikÐéÄâ»ú£¬»¹Éæ¼°µ½µ×²ãC/C++µÈµÄÄÚ´æ¹ÜÀí£¬²»ÄÜÍêÈ«¼ÄÏ£ÍûÐéÄâ»ú°ïÎÒÃÇÍê³ÉÄÚ´æ¹ÜÀí¡£

ÔÚÕâЩ×ÊÔ´²»Ê¹ÓõÄʱºò£¬¼ÇµÃµ÷ÓÃÏàÓ¦µÄÀàËÆclose£¨£©¡¢destroy£¨£©¡¢recycler£¨£©¡¢release£¨£©µÈº¯Êý£¬ÕâЩº¯ÊýÍùÍù»áͨ¹ýjniµ÷ÓõײãC/C++µÄÏàÓ¦º¯Êý£¬Íê³ÉÏà¹ØµÄÄÚ´æÊÍ·Å¡£

Cursor¶ÔÏó¼°Ê±¹Ø±Õ

IO¶ÔÏó¼°Ê±¹Ø±Õ

¼¯ºÏÔì³ÉµÄÄÚ´æÐ¹Â©

Vector v = new Vector(10);
for (int i = 1; i < 100; i++) {
Object o = new Object();
v.add(o);
o = null;
}

»­¸ö¼òµ¥µÄÄÚ´æÍ¼¾Í¿ÉÒÔ¿´³öÔÚÕ»ÖзÖÅäµÄvÖ¸ÏòÁËÔÚ¶ÑÖзÖÅäµÄÊ®¸ö¿Õ¼ä£¬ËäȻÿ´ÎÖÃΪnull£¬µ«Êǽ«V×÷ΪGC ROOTµÄÆðµãÈÔÈ»¿É´ïÿһ¸öÔÚ¶ÑÖеÄObject¶ÔÏ󣬶øÎÒÃDZ¾ÒâÊǽ«Ã¿Ò»¸öObject¶ÔÏóÖÃΪÁËnull¡£

½â¾ö·½°¸ºÜ¼òµ¥£ºv = null ¡£±¾ÖÊÉÏÊǶϵôGC ROOTµÄÆðµã¡£

   
1803 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì