<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-12  評(píng)論-0  文章-1  trackbacks-0
      2012年1月8日
    the super keyword in java generic programming is used to declare a template of a specific type. e.g.
    List<? super MyClass> list = new LinkedList<AnyTypeDerivedByMyClass>();
    posted @ 2012-12-31 15:35 Sam Zheng 閱讀(242) | 評(píng)論 (0)編輯 收藏
    int (*test(char *(*)(void)) (int); declares a function named "test" which accepts a pointer to a function accepting no parameter and returning a char pointer, the function "test" returns a pointer to a function which accepts a integer parameter and returns a integer.
    Note: a declaration declares either a variable(pointer) or function(pointer), if its name is followed by left parentheses, it is a function, otherwise it is a variable(pointer).
    posted @ 2012-09-20 14:38 Sam Zheng 閱讀(126) | 評(píng)論 (0)編輯 收藏
    if you don't feel comfortable with your code, it's time to refactor/re-think about it.
    posted @ 2012-08-31 11:36 Sam Zheng 閱讀(158) | 評(píng)論 (0)編輯 收藏
    don't get trapped when reading source code of a complex module, first figure out what the module does/its main functionality and its interfaces, once you get into details, you cannot see the module as a whole and forget its main functionality, if you recognize you are trapped in details, try to come out and focus on interfaces, top->down->top->down
    posted @ 2012-08-15 16:07 Sam Zheng 閱讀(153) | 評(píng)論 (0)編輯 收藏
    The crucial part in design/programming, is to break down complex things, anything should be easy when broken down to manageable pieces, and, only when broken down, can it be easy. when doing so, the most important thing is to think about the granularity and the relationship between every pieces/modules, again, reasonability.
    posted @ 2012-04-18 12:10 Sam Zheng 閱讀(142) | 評(píng)論 (0)編輯 收藏
    when analyzing/programming, think about reasonability against requirements
    posted @ 2012-04-17 12:55 Sam Zheng 閱讀(312) | 評(píng)論 (0)編輯 收藏
    1. what does the program/module/class/method do?
    2. what is its input, if any?
    3. what is its output, if any?
    for a class, understanding its lifecycle is crucial:
    1. how is it created? by who? from a factory? what are the parameters required to create it?
    2. does it have any enforced lifecycle methods? e.g. initialize, dispose..., who is responsible to call these methods, in which order?
    3. what it can do at each stage of its lifecycle?
    4. who is going to use it/what is its client?

    posted @ 2012-03-09 10:52 Sam Zheng 閱讀(236) | 評(píng)論 (0)編輯 收藏
    An interface or a class should only do things that it knows, never do things it is not sure about. to define the responsibility of an interface/class clearly and precisely is critical.
    posted @ 2012-02-27 14:12 Sam Zheng 閱讀(168) | 評(píng)論 (0)編輯 收藏
    The main difference between SoftReference and WeakReference is that GC uses different algorithm to determine when to reclaim the objects they refer to, they can be used interchangablely in most situation.

           
            // soft reference
            o = new Object();
            ReferenceQueue
    <Object> sq = new ReferenceQueue<Object>();
            SoftReference
    <Object> sf = new SoftReference<Object>(o, sq);
            System.out.println(sf.get());
            o 
    = null;
            
            System.gc();
            r 
    = (Reference) sq.poll();
            
    if (r != null) {
                System.out.println(r.get());
            }

            // weak reference
            Object o = new Object();
            ReferenceQueue
    <Object> q = new ReferenceQueue<Object>();
            WeakReference
    <Object> w = new WeakReference<Object>(o, q);
            System.out.println(w.get());
            o 
    = null;
            System.gc();
            
            Reference r 
    = (Reference) q.poll();
            
    if (r != null) {
                System.out.println(r.get());
            }

            
    // phantom reference
            o = new Object();
            ReferenceQueue
    <Object> pq = new ReferenceQueue<Object>();
            PhantomReference
    <Object> pf = new PhantomReference<Object>(o, sq);
            System.out.println(pf.get());
            o 
    = null;
            
            System.gc();
            r 
    = (Reference) pq.poll();
            
    if (r != null) {
                System.out.println(r.get());
            }
           


    from http://www.ibm.com/developerworks/library/j-refs/

    The SoftReference class

    A typical use of the SoftReference class is for a memory-sensitive cache. The idea of a SoftReference is that you hold a reference to an object with the guarantee that all of your soft references will be cleared before the JVM reports an out-of-memory condition. The key point is that when the garbage collector runs, it may or may not free an object that is softly reachable. Whether the object is freed depends on the algorithm of the garbage collector as well as the amount of memory available while the collector is running.

    The WeakReference class

    A typical use of the WeakReference class is for canonicalized mappings. In addition, weak references are useful for objects that would otherwise live for a long time and are also inexpensive to re-create. The key point is that when the garbage collector runs, if it encounters a weakly reachable object, it will free the object the WeakReference refers to. Note, however, that it may take multiple runs of the garbage collector before it finds and frees a weakly reachable object.

    The PhantomReference class

    The PhantomReference class is useful only to track the impending collection of the referring object. As such, it can be used to perform pre-mortem cleanup operations. A PhantomReference must be used with the ReferenceQueue class. The ReferenceQueue is required because it serves as the mechanism of notification. When the garbage collector determines an object is phantomly reachable, the PhantomReference object is placed on its ReferenceQueue. The placing of the PhantomReference object on the ReferenceQueue is your notification that the object the PhantomReference object referred to has been finalized and is ready to be collected. This allows you to take action just prior to the object memory being reclaimed.

    posted @ 2012-01-08 13:06 Sam Zheng 閱讀(126) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 久久久精品国产亚洲成人满18免费网站| 亚洲国产美女精品久久久久| 国产亚洲成在线播放va| 国产精品视频永久免费播放| 亚洲videosbestsex日本| 91精品免费在线观看| 亚洲国产亚洲片在线观看播放 | 深夜a级毛片免费视频| 免费一级特黄特色大片在线 | 亚洲老熟女五十路老熟女bbw | 两性色午夜视频免费网| 亚洲午夜久久久久久久久久| 精品国产污污免费网站入口| 国产成人亚洲综合色影视| 免费国产黄网站在线观看| 亚洲色图视频在线观看| 性做久久久久久久免费看| 亚洲区日韩精品中文字幕| 免费大片黄手机在线观看| AAAAA级少妇高潮大片免费看| 亚洲欧洲精品无码AV| 久久久免费精品re6| 亚洲一区二区三区高清不卡| 成人午夜性A级毛片免费| 特级aaaaaaaaa毛片免费视频| 久久久青草青青国产亚洲免观 | 久久精品女人天堂AV免费观看| 亚洲国产精品网站在线播放| 亚洲人成电影网站国产精品| 两个人的视频www免费| 亚洲国产午夜精品理论片| 免费一级成人毛片| 久久国产精品免费专区| 亚洲色大成网站www| 精品亚洲成α人无码成α在线观看| 日韩视频在线观看免费| 狠狠色香婷婷久久亚洲精品| 免费久久精品国产片香蕉| 国产免费无码AV片在线观看不卡| 亚洲人成人77777网站不卡| 天堂亚洲免费视频|