JavaとJVMはノートを深く理解します

74630 ワード

1.  HashCode
          hashCode           ,       hashCode          。
             hashCode   ,        ,             ,    equals()  
               equals()        true,      hashCode     
             equals()        false,      hashCode      
                  hashcode   , equals          false;
                  hashcode   , equals         。


         equals()   ,    hashCode  , equals()   hashCode()             


      hashCode                         ,         HashSet、HashMap  HashTable




      Java             ,            ,                ,               :
              ->         ->         、       ->             
                        ,      


     Java       :
                            ( > ),                 ,                 


                         ,            ,             ,              ,              ,               ,
                           ,           ;             ,                ,               。                        


2.JVM    


           
                             
                         native  ,                      
                        native  ,         undefined
      Java 
                        ,              。
                     :     、    、                    、                
                          ,             ,          ,       ,       
                                 Java    


                  
                             
                            
                                   
                              
                               


       
                          


              ---        
               1、         (  :   、    、    )、    、           
               2、   




           




3.Hash 
            ,             ,                      。
         Hash    ,         ,                   ,            
         eg:
               13980593357
               15828662334
               13409821234
               13890583472


            Hash    "  "                  ,    O(1)
              :
                 Hash         
                               f:key  --> address
                                   key              
                            :
                               1.         Hash  
                               2.  Hash               (hash       ,         )       Hash  


                        Hash    ,    "  "     ,     "  "   Hash  ,   Hash    




4.Java       :              ,      ,    ( )      ,          JVM   ,            !!!
      ---  JVM            ---          
           JVM                       
      ---          ,   (   )  ,  8            
                   ,                  ,   ,          
          ,      ,        (   )
                :!!!  ---   JVM      
     1.                     ,               
     2.                      (   ) 
     3.    ,               (JVM )        ,     ,         (            )




5.   ---  JVM               : Young Gen, Old Gen
           Young Gen    :Eden         Survivor (from   to)
                             Eden Survivor     8:1    -XX:SurvivorRation  
                     -Xmx -Xms   
           Young Gen    -Xmn     


           -XX:NewSize -XX:MaxNewSize
                     ,          1/3  1/4,        。


           Minor GC  ---             ,Java               ,   Minor GC     ,          ,
                              GC      (       ,        ,       ,                 ,            )
           Full GC   ---         GC, Full GC   ,    


                      Eden (         ), Eden     Minor GC,
                    Minor GC ,      ,     Survivor ,    Survivor       Minor GC,    1 ,
                      (  15 ),         ,
                 ,  Full GC


             Stack                              -Xss   
                    -XX:PermSize -XX:MaxPermSize  




6.JVM class               --- JVM        class     ,        ,        ,              Java  
                           :            ,       JVM         


            JVM          JVM  :


                 (1)   :     Class  ;


                 (2)   :           JRE ;


                    (a)  :    Class        ,          JVM  ;


                    (b)  :             ,          ;


                    (c)  :                  ;


                 (3)    :       ,            ,           


              :
                 1.          
                                             ,              ,               ,           ,
                                              ,     ,          ,           


                 2.     
                          1.           ,         
                          2.         ,         (  :        ,        ),          
                          3.    static ,           
                          4.static ,            (        ,     ,Class.forName )




7.       :
        ^  $               。 :^abc      abc  ( :abcd,abcefd),abc$      abc  ( :);^abc$    abc(abc    ,abcabc   ) ;abc     abc    
          *   +   ?       0    ,1    ,0  1 。 :abc*   0    abc,      
             *+?         ,abc{2}  ab       c, abcc,dfdabccccc     ;abc{2}$    abcc     , 343abcc
          abc{1,2}   ab    1 2 c;
          abc{3,}   ab      3 c; {,3}       
          |       ab|cd        ab  cd;
          .         
                     
          "[ab]":          "a" "b"(   "a|b");
          "[a-d]":            'a' 'd'    (   "a|b|c|d"  "[abcd]");
          "^[a-zA-Z]":             ;
          "[0-9]%":              ;
          ",[a-zA-Z0-9]$":                         。


                   ,       :     ,      ,              ,       ~  。
                         :  ((^[0-9]+[~]?)?|^([0-9]+[,])+)[0-9]+$




8.JVM  GC                   ----   JVM     :
                                                            http://www.cnblogs.com/zhguang/tag/Java/
                                                            http://blog.csdn.net/column/details/javavirtualmachine.html
                                                            http://blog.csdn.net/eric_sunah/article/details/7870906
        1.      
             1.      
                                   ,          ,    +1,     ,    -1,        0           
                        :
                                        !!!
             2.        ---  JVM   GC    
                               GC Roots         ,           ,              ,
                             GC Roots           ( :GC Roots        ),         
                      Java     GC Roots         :
                           1.    (        )      
                           2.              
                           3.           
                           4.      JNI(Native  )     


        2.JVM       
             1.    :
                                  (Eden + 2 Survivor )、   、   


                                 Eden ,    Minor GC     Survivor1 ,     Minor GC   Survivor2 ,       
                           (        )          






                                ,   、  、          ,           
                        GC       ,            ,      finalize()  
                        GC    JVM       ,System.gc() Runtime.gc()  JVM    GC   , JVM        GC
                                    ,     OutOfMemoryError
             2.GC      ?
                                 ---     
                                 ---         GC Roots        , GC Roots      ,             ,      GC Roots          ,        ,      
                                                     ,      GC Roots  ,         ,       ,             ,             ,                 ,    
                                 ---      GC Roots   
                                      1.          (     )
                                      2.           
                                      3.           
                                      4.           (Native  )


                             
                                 ---           ,       0,         
                     ,        ,           


             3.      :        :http://www.cnblogs.com/sunniest/p/4575144.html
                                ,  2     :
                                                    1.                          (     )
                                                    2.            ,           
                              1.  -    :
                                               GC Roots       ,          ,     ,               ,    
                                                :      ,                
                                                :GC        ,            


                              2.    :
                                                                。           :         ;                  ;                
                                                         2 ,         ,      ,                ,                 ,
                                                                  ,         ,         ,         ,    ,    
                                                :        
                                                :          ,      




                              3.  -    :
                                                    -    ,           ,             ,           


                              4.    :
                                                                 。        、   、   ,               


                                                 :   ---      Minor GC,             :  Serial、PraNew、Parallel Scavenge    


                                                              1.       ,                


                                                              2.       8:1:1       eden    survivor(survivor0,survivor1) 。  Eden ,   Survivor (    )。      Eden    。     eden          survivor0 ,    eden ,   survivor0       ,  eden  survivor0           survivor1 ,    eden   survivor0 ,  survivor0    ,   survivor0  survivor1   ,   survivor1   ,     。
                                                                Eden : Survivor0:Survivor1 = 8:1:1


                                                            3. survivor1       eden survivor0      ,              。              Full GC,      、        


                                                            4.      GC   Minor GC,MinorGC       (    Eden      )


                                                 :   ---    Full GC                 :Serial Old、Parallel Old、CMS   


                                                              1.        N             ,         。  ,                        。


                                                              2.          (     1:2),          Major GC Full GC,Full GC       ,            ,      。


                                                 :   ---          , Java 、   。              




             4.GC    ---       
                              Serial            ---      
                                                              ,          ,  :    
                              Serial Old        ---    -    
                                                              
                              ParNew            ---        
                                                     Serial         ,   CPU      Serial     
                              Parallel Scavenge ---
                                                          ,      ,    CPU。      99%,    =       /(      +GC    )。                   
                              Parallel Old   (  -    )
                                                   Parallel Scavenge         ,     ,     
                              CMS               ---        
                                                        、   ,    GC      ,cpu     ,     ,     ,  cpu           
             5.GC    
                              Minor GC:             Eden        ,  Minor GC         ---      
                                             ---        Eden   ,      
                                             ---      
                                             ---       、      , Eden    


                              Full  GC:             ,      、   、   
                                             ---          ,    Minor GC  
                                             ---       Full GC  
                                             ---    JVM    ,      Full GC   
                                                 Full GC   :
                                                  1.    
                                                  2.    
                                                  3.System.gc()     
                                                  4.   GC  Heap           




             6.         :
                              1.     (HashMap、Vector),                 ,           
                              2.    、     、    、IO        close(),  GC        
                              3.   ,                          




9.JVM      http://www.infoq.com/cn/articles/java-memory-model-1
            :          (   、        )     ,                   、               
             JVM       ,Java                ,          ,             ,
                                    ,                      ,       ,            ,           


        JMM(Java    ,Java Memory Model  )   Java    、            。
        JMM                :                ,               (local memory),
                          /        ,              ,          
        Java        :
                                ,             ,              ,         ,
                              (  、  )           ,              ,    ,          
                                   ,                   
               :
                   (  Java        ,volatile            ,               ——
                              ,                   ,                    ,         volatile    )。
                                          ,                    


          8         :
              Java       8                       
                 1.lock(  )
                                 ,                  
                 2.unlock(  )
                                 ,                 ,                
                 3.read(  )
                                 ,                       ,     load    
                 4.load(  )
                                 ,  read                         
                 5.use(  )
                                  ,                     ,                        ,        
                 6.assign(  )
                                  ,                       ,                           
                 7.store(  )
                                  ,                     ,     write    
                 8.write(  )
                                 ,  store                       


          8            :
                 1.   read load、store write        ,             ,           ( :read load  、store write           )
                 2.              assign  , :             ,            
                 3.           (       assign  )                  
                 4.             "  ",                    (load assign)   ,
                    :       use store    ,       assign load  
                 5.                    lock  , lock              (    ),
                       lock ,         unlock  ,       
                 6.         lock  ,              ,            ,      load assign         
                 7.           lock    ,        unlock  ,     unlock            
                 8.       unlock    ,             (  store write  )


        volatile       :   ---         
                 1.              
                 2.         


                 ?
                、   、    




10.Java       
        Java  ,    Java      ,         ,                  。
                               ,                。                  
          :
             1:        
                 Java  API                ,         ,       Java      ,  :    、           
                 java.lang.Class    ,                     、    (getConstructor、getFiled、getMethod)
                           getDeclaredXXX  ,    getDeclaredXXX                   ,          。
                 Constructor、Field Method               、    。                     。
             2:    ,   Java      
                       Java    ,               
                  Java              ,            API   
               :
                 clazz.setAccessible(true)   ---          private   private  


            :
                :
                                        ,            。                ,          。
                                       ,     、    、  、   。                              ,
                               ,               。                   


                :
                     JDK5         ,                        。
                          ,                    ,                       InvocationHandler     ,
                                          ,          InvocationHandler invoke()  ,
                      invoke()              、     Method          ,invoke()             。
                                      ---           AspectJ AOP     AOP    




11.         
        -Xms        ,       1/64(<1G)
        -Xmx        
        -Xmn             (eden+ 2 survivor space),
                    =      +       +      
                           ,      ,         。           ,Sun              3/8
        -XX:SurvivorRation      Eden  Survivor    ,   8,   Survivor    Eden     2:8,  Survivor        1/10
        -Xss            ,    256K
        -XX:PermSize        (    )   ,         1/64
        -XX:MaxPermSize     (    )   ,      1/4


        -XX:+UseParallelGC         ,     GC  


        eg:
           -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=256M
           -vmargs      VM   ,         JVM    
           -Xms128m JVM        
           -Xmx512m JVM          ,    
           -XX:PermSize=64M JVM         
           -XX:MaxPermSize=128M JVM           ,    
          :
            Java         ,         ,                 。    Java          。”“ JVM             (Non-heap memory)”。
            JVM           :    。       Java       ,          ;    JVM      ,
               ,JVM            、     (       、       )                   




              :
            1.    
            2.    






12.JVM    


                 
               
             
             (JVM  +      )
         :
           GC       ,       GC,            ,  GC


          :
                 :   、  static  、  、   
                               (  、    )
                         static  
                         field  
                           final  
                             
                            :                (   )   class       ,                    
                 :   
                            Class    getName          ,           
                 :
                      -XX:PermSize              ,  16M
                      -XX:MaxPermSize           ,  64M
                 :
                                 ,   OutOfMemoryError
             GC  :
                          
                             
               :
                          , -XX:PermSize==-XX:MaxPermSize,    256M
                     eg:
                        -XX:PermSize=256M
                        -XX:MaxPermSize=256M
                        static           ,           (                        ,            ,                )
                               ,           Class                  (  Class        ,Class               )


        :
                 :
                         (                        ,            ,                )
                        
                 :
                     new           
                 :
                     -Xmx:     ,        1/4   1G
                     -Xms:     ,        1/64   1G
                     -XX:MinHeapFreeRatio,                40% ,      -Xmx
                     -XX:MaxHeapFreeRatio,              70% ,      -Xms
                       :
                               ,-Xmx -Xms      ,  ,              !!!
                 :
                     OutOfMemoryError:Java heap space
                  :
                        :
                            Eden + from + to   from   to     
                            -Xmn:       
                            -XX:SurvivorRation :   Eden:from(to)   ,    8:1   : eden:from:to = 8:1:1
                        :
                                         2   :
                                    :-XX:PretenureSizeThreshold(  :  )           
                                    :                 




               :
                             -Xmx==-Xms
                     eg:
                       -Xms2048m
                       -Xmx2048m
                       -Xmn512m
                       -XX:SurvivorRatio=8
                       -XX:MaxTenuringThreshold=15
                         ,-Xms==-Xmx==2048m,     -Xmn==512m,  ,       2048-512==1536m,        ,
                           ,   :   ==1:3,   ,     -XX:MaxTenuringThreshold=15(      ),       15           




                     Eden 2 Survivor(from+to),   Eden:from:to==8:1:1
                    1.           Eden (     -XX:PretenureSizeThreshold,               )
                    2. Eden        ,           from (  :         from    ,                 ),  Eden         
                        :  Eden    ,        Eden    ,   Eden        from  ,  Eden ,           Eden 
                    3.            Eden , Eden   ,  Eden  from           to(  ,         to     ,                 ),     Eden  from      ;
                    4)    ,             (     ,      +1),     ,       15 (        :-XX:MaxTenuringThreshold   ),        
                    5)                           ,      Full GC(           ,       )




        :
                :
                               ,         (          )                   ,                  、     ,
                                     ,                      ,       ,           ,             
                 :
                         : 8       、    ,             ,     
                 :
                    -Xss:     ,     1m  
                    eg:
                      -Xss1m
                 :
                    StackOverFlowError                          
                                  eg:
                                             (     )
                                             javac          
                    OutOfMemoryError:                  ,              ,     
                                    :
                                           ,            


       C   (     )


               :                   ,                 。
                :                         ,       ,     (      )            ,
                                       ,                 ,             ,    。




             :
                    ,                   ,              。
                    ,         (             )    Java      


       Java         3   
                
                                   :Mark Word( 32  64 JVM      32bit 64bit),      :
                                  hashCode
                                  GC    
                                     
                                      
                                     :   、   、                 JDK1.6   ,      Synchronized    ReentrantLock     ,
                                 Synchronized          ,    Synchronized,       ReentrantLock     ,         。
                           :              
                                    JVM                    (       Class   )
                 
                                  
                 
                       JVM          8    ,   ,      


            :
               1.Mark Word         ,                
               2.         ,                   ,JVM    Java            ,       
               3.                   (  )
                    boolean      1  
                    byte         1  
                    short        2  
                    char         2  
                    int          4  
                    float        4  
                    long         8  
                    double       8  


                           32  64         4bit 8bit


                2    :
               1.    
                             :
                                      ( :      ,       )    
                           :
                                             ,           ,         ,                                  
                         GC   :
                                 Serial、ParNew
               2.    
                             :
                                        
                           :
                                JVM          ,               ,    ,             new     ,        
                         GC   :
                                CMS
                    :
                       1.2       ,   Java       
                       2.Java       ,   GC         "  -  "    "  -  "(   "  -  "),      ,           




                    :5 
             1.       
                    JVM      new                      ,                   、       
                           new                   ,    ,           
             2.    
                                     
             3.     
                                              
                                    
             4.     
             5.  
                        ( 3         ,       ,     )




13.JVM     GC
       1.      
              :GC    
                :              
               :
                    PC        ,    GC
       2.        
              1.     
                           :
                                          ,          ,    +1,     ,    -1
                           :
                              1.        ,           ,    
                              2.          
              2.     (    )
                           :
                                 (GC Root)      ,                    ,                        
                             GC Root  :        (       )    
                                  1.Java       
                                  2.    ,   +    
       3. 3      
                 :     A a = new A();//a    
                                        。           ,            。       ,Java       OutOfMemoryError  ,       ,                          
                 :          ,           ,      ,        (   )
                            A a = new A();
                            SoftReferencesr = new SoftReference(a);   //   
                 :                        ,        ,      


       4.GC    
              1.  -                      ---     
              2.  -    (  -  )       ---     
              3.                           ---     


                -                      ---     
                          :
                                    ,          ,          ,          ( :    )
                            :
                                           
                                   
                          :
                                     ,           (    :                              ),         
                                      (   :      ;   :         )
                          :
                                  ,     ,         "     "


                -    (  -  )       ---     
                          :
                                       ,          ,                    (     )(            -       ),     ,             。
                            :
                                  (    )
                          :
                                   ,                     ,                
                                      (   :      ;   :         )
                          :
                                     
                          :
                                  ,    ,         "     "




                                         ---     
                          :
                                       ,          ,                   (           )  ,            (           )     
                            :
                                           
                                      (           )
                                   (    ):   98%    "    " ,        
                          :
                                        
                                     
                          :
                                  ,    ,         "     ", 《    JVM    》
                                   :           ,       




14.  Set      ---  HashSet、TreeSet、LinkedHashSet    --      ,   Iterator foreach    
                :http://blog.csdn.net/speedme/article/details/22661671


           HashSet    ---    ,  ,  add()    hashcode equals,     HashSet             ,    ,       null
                            :
                              HashSet:        ,     。          ,  hashCode    ,    ,     equals  


           TreeSet    ---    ,         ,  add()      Comparable,    compareTo()  ,     TreeSet        Comparable,  compareTo()  
                                      ,          
                             2   :    、    
                           TreeSet                   equals    false,    CompareTo        0
                               
                                                   CompareTo(Object obj)             ,           。
                                       Java     Comparable  ,         compareTo(Object obj)  ,          ,                。
                                       obj1.compareTo(obj2)      0,             ,        ,   obj1  obj2,      ,   obj1  obj2。
                                                 equals      true,       compareTo        0
                               
                                                     ,     ,       ,    Comparator  ,   int compare(T o1,T o2)  


                           2       :
                                          :              ,      TreeSet          comparable    compareTo(Object obj)  


                                                              。(               ,        comparable             )


                                          :          ,          comparator  ,  compare(Object o1,Object o2)  ,    TreeSet       


                                                              ,           ,               ,


           LinkedHashSet  --- HashSet   ,  ,       


           HashSet     :         ,     hashCode(),    hash ,          hash      
                                   hash      ,  hashCode ,           ,    ,
                                  hash      ,    equals()    ,
                                     false   .
                                      true   .


                                          HashSet     
                                *         hashCode()   equals()  
                                *   equals()         
                                *   hashCode()                 ,            


           TreeSet      :     ,add()       compareTo()      ,                           ---         
                                :http://blog.csdn.net/jinhuoxingkong/article/details/51191106
                              TreeSet       ,  add()            (  、  ),             ,             
                              Integer String      TreeSet  ,      ,    Comparable  ,  compareTo(),      
                                 compare()   ,          TreeSet         ,   :             。       、         ,        、     。


                                            TreeSet    ,       Comparable  
                                *      implement Comparable
                                *     compareTo()  
                                *             ,       ,         




                              TreeSet     2     :
                                        1.           Comparable  ,    compareTo()                ----     
                                        2. TreeSet      Comparator      ,    compare()       ----       


                                        * a.    (Comparable)
                                                * TreeSet  add()             Comparable  
                                                *      compareTo()           
                                                *   compareTo()           
                                        * b.     (Comparator)
                                                *   TreeSet          Comparator
                                                *      Comparator     ,   TreeSet             
                                                * add()         Comparator   compare()    
                                                *       compare        ,       compare        
                                        * c.       
                                                * TreeSet         ,       Comparable   (     ClassCastException)
                                                * TreeSet    Comparator,      Comparator




15.  Map        --- HashMap、TreeMap
                        :http://blog.csdn.net/chenssy/article/details/26668941
           HashMap
                    key hashCode  ,  
           TreeMap
                         ,     key         ,           Comparator    ,            
                  TreeMap    key   ,    value  
                      value  ,   TreeMap EntrySet   list,    Collections.sort     --   :http://blog.csdn.net/liuxiao723846/article/details/50454622
                                                                                                                http://blog.csdn.net/xiaoyu714543065/article/details/38519817
                  eg:value String       ,       value    
                     public static Map sortTreeMapByValue(Map map){
                            List list = new ArrayList<>(map.entrySet());
                            Collections.sort(list, new Comparator() {
                                //   
                                @Override
                                public int compare(Map.Entry o1, Map.Entry o2) {
                                    return o1.getValue().toString().compareTo(o2.getValue().toString());
                                }
                            });


                            for (Map.Entry e: list) {
                                System.out.println(e.getKey()+":"+e.getValue());
                            }


                            return map;
                        }




16.  ThreadLocal
             ThreadLocal     ,ThreadLocal                    ,                    ,               
          3     :
                      void set(T value)、T get()  T initialValue()
              :
                          ,            ,                ,    ThreadLocal     
            :
              ThreadLocal              ?
                      ThreadLocal     Map,              ,Map key     ,value        


                      eg:
                        public class JavaTest {
                            //     Integer        ,           ThreadLocal initialValue()  ,     
                            public static final ThreadLocal local = new ThreadLocal() {
                                @Override
                                protected Integer initialValue() {
                                    return 0;
                                }
                            };
                            public static void main(String[] args) throws InterruptedException {
                                Thread[] threads = new Thread[5];//   5   
                                for (int j = 0; j < 5; j++) {
                                    threads[j] = new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                            //            ,    5 
                                            int num = local.get();//               ,    thread   ,    initialValue   
                                            for (int i = 0; i < 5; i++) {
                                                num++;
                                            }
                                            //             
                                            local.set(num);
                                            System.out.println(Thread.currentThread().getName() + " : "
                                                    + local.get());


                                        }
                                    }, "Thread-" + j);
                                }


                                for (Thread thread : threads) {//     
                                    thread.start();
                                }
                            }
                        }


                             :
                        Thread-0 : 5
                        Thread-4 : 5
                        Thread-2 : 5
                        Thread-1 : 5
                        Thread-3 : 5
                            ,            5,              ,        




17.     
             
                    Java   4    ,            


                             @Retention                     (    )
                                                :
                                                     RetentionPolicy.SOURCE:    java   ,      
                                                     RetentionPolicy.CLASS:   class   ,   VM  (  )
                                                     RetentionPolicy.RUNTIME:       ,VM          ,                     ---     


                             @Target                   
                                                :
                                                     ElementType.CONSTRUCTOR:      
                                                     ElementType.FIELD:     、  、  (  enum  )
                                                     ElementType.LOCAL_VARIABLE:       
                                                     ElementType.METHOD:     
                                                     ElementType.PACKAGE:    
                                                     ElementType.PARAMETER:     
                                                     ElementType.TYPE:  、  (      ) enum  


                             @Documented          JavaDoc 
                             @Inheried                   


               :
                   eg:
                           ---  MyAnnotation


                          import java.lang.annotation.ElementType;
                          import java.lang.annotation.Retention;
                          import java.lang.annotation.RetentionPolicy;
                          import java.lang.annotation.Target;


                          /**
                           *      
                           *        
                           */
                          @Retention(RetentionPolicy.RUNTIME)
                          @Target({ElementType.METHOD, ElementType.TYPE})
                          public @interface MyAnnotation {
                              //       
                              String color();
                              String value() default "  xxx";//          
                              int[] array() default {1,2,3};
                              Gender gender() default Gender.MAN; //       


                              //       
                              MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday = "       1988-2-18");
                          }


                             ---  Gender
                          public enum Gender{
                            MAN{
                               public String getName(){
                                   return " ";
                               }
                            },
                            WOMEN{
                               public String getName(){
                                   return " ";
                               }
                            };
                          }


                            ---  MetaAnnotation
                          public @interface MetaAnnotation{
                              String birthday();
                          }




                       :
                          /**
                           *        
                           * Created by hetiewei on 2016/10/12.
                           */
                          @MyAnnotation(metaAnnotation = @MetaAnnotation(birthday = "       1991-2-27"),
                          color = "red", array = {23, 26 })
                          public class Test {
                              public static void main(String args[]){
                                  //   Test     @MyAnnotation  
                                  if (Test.class.isAnnotationPresent(MyAnnotation.class)){
                                      //        ,   
                                      MyAnnotation annotation = Test.class.getAnnotation(MyAnnotation.class);
                                      System.out.println(annotation);


                                      //        


                                      //1.      
                                      System.out.println(annotation.color());
                                      System.out.println(annotation.value());


                                      //2.      
                                      int[] arrs = annotation.array();
                                      System.out.println(arrs.toString());


                                      //3.    
                                      Gender gender = annotation.gender();
                                      System.out.println("  :"+gender);


                                      //4.      
                                      MetaAnnotation meta = annotation.metaAnnotation();
                                      System.out.println(meta.birthday());
                                  }
                              }
                          }




18.                     ,       Field,  ,            ,           
                       :
                  (1).                ,  enum           java.lang.Enum ,     Object 。  java.lang.Enum    java.lang.Serializable java.lang.Comparable  。
                  (2).   enum  ,            final  ,           。
                  (3).            private     ,              ,     private  ;           ,     private   。
                  (4).                       ,               。       ,       public static final  ,         。
                                   values  ,                 
                  (5)        
                       name() ,toString()       ---           ,     toString()
                       ordinal()     ---             ,         0
                       public static T valueOf(Class enumType, String name)
                                     ---                  ,                           ,            
                  eg:
                     public enum SeasonEnum{
                       //  4     
                       SPRING,SUMMER,FALL,WINTER;
                     }
                       :
                          1.          (,)  ,                 
                          2.                 
                          3.        EnumClass.variable  eg:  SeasonEnum.SPRING
                          4.     switch     
                          5.         EnumClass[] enums = EnumClass.values();


                Field、      
                     1.        ,            ,         Field,  






19.       
         1.HashMap          +  ,   hash  ,               ,
                                 hash   , :        ,          ,            
                          :


                              +        Entry[]          , Key                  
                                             key       (  ),         key   


                              hash  ,  put get       ,     , K/V  put()   ,   hashCode()  hash   bucket  ,
                                 ,HashMap     bucket           (      ,     2 )。
                                 ,  K,  hashCode()  bucket  ,      equals()       。
                                   ,HashMap                , Java8 ,    bucket            (,  8 ),
                                       ,      


         2.HashSet        HashMap  ,   :           ,   :      
                              HashSet       ,           ,
                             hash            ,   hashCode equals    ,  hashSet,   hashCode                ,   equals            
                                         ?
                                1>         :         hashCode()      (               )
                                2>      : equals          。
                                  : hash   ,        ,  false; hash   ,         ,    ,  true,  false。
         3.TreeSet            ,           ,           Comparable  ,          CompareTo()    
                            2        
                                        1.    ,  Comparable  ,  compareTo()
                                        2. ThreeSet      Comparator       




20.     
           :
              http://www.codeceo.com/article/java-thread-pool-deep-learn.html
              http://www.codeceo.com/article/java-threadpoolexecutor.html
         1.   :
                  ThreadPoolExecutor extends AbstractExecutorService implement ExecutorService   4    
                       :
                           corePoolSize:      
                                              ,      ,      0,      ,           ,           corePoolSize ,          、
                           maxPoolSize:          
                           keepAliveTime:                    
                                               ,             corePoolSize ,keepAliveTime     ,             corePoolSize,            corePoolSize ,             keepAliveTime,    ,             corePoolSize
                           unit:           keepAliveTime     , 7   , TimeUnit   7     
                                                  TimeUnit.DAYS;               // 
                                                  TimeUnit.HOURS;             //  
                                                  TimeUnit.MINUTES;           //  
                                                  TimeUnit.SECONDS;           // 
                                                  TimeUnit.MILLISECONDS;      //  
                                                  TimeUnit.MICROSECONDS;      //  
                                                  TimeUnit.NANOSECONDS;       //  
                           workQueue:        ,           
                                                 :
                                                  ArrayBlockingQueue
                                                  LinkedBlockingQueue       ---    ,    
                                                  SynchronousQueue
                                                  PriorityBlockingQueue
                           threadFactory:     ,        
                           handler:                    ,
                                             4   :
                                                     ThreadPoolExecutor.AbortPolicy:       RejectedExecutionException  。
                                                     ThreadPoolExecutor.DiscardPolicy:      ,       。
                                                     ThreadPoolExecutor.DiscardOldestPolicy:          ,          (     )
                                                     ThreadPoolExecutor.CallerRunsPolicy:          


         2.     :
                  1.     :
                               ThreadPoolExecutor      Volatile  runState          ,  volatile           
                                   4   :
                                               volatile int runState;
                                               static final int RUNNING    = 0;
                                               static final int SHUTDOWN   = 1;
                                               static final int STOP       = 2;
                                               static final int TERMINATED = 3;
                                 :
                                    1.      ,   ,     RUNNING  
                                    2.     shutdown()  ,      SHUTDOWN  ,            ,            
                                    3.     shutdownNow()  ,     STOP  ,            ,              
                                    4.      SHUTDOWN STOP  ,            ,                ,       TERMINATED  


                  2.     :
                                      BlockingQueue ,  execute(Runnable )     ,




21.Java     
                  ---                
                              Java    javac      ,  JVM           ,            、           


         JVM            
                Bootstrap ClassLoader         ,   Java    (jre/lib/rt.jar), C++    ,    java.lang.ClassLoader
                Extension ClassLoader         ,   Java    (jre/ext/*.jar), Java                 。                 Java  
                System ClassLoader            ,   Java      (classpath)   Java ,
                                                       Java              ,   ClassLoader.getSystemClassLoader()        
                                     java.lang.ClassLoader ,         


         Java     3   :
                     :
                                            ,                  ,           
                      :
                                                    ,                  
                      :
                                      ,                               


                3   :
                   :
                              :(  、  、  )
                                           :


                   :
                                     
                   :
                           :          JVM  、        
                           :           ,          
                           :                    
                    :
                                        


               :
                 1.JVM               
                 2.       :
                       1.            ,         
                       2.         ,       ,        
                       3.      static ,           


         java.lang.ClassLoader 
                           ,             ,              Java , :java.lang.Class      
                 ClassLoader    :
                       getParent()                        
                       loadClass(name)            name  ,     java.lang.Class   
                       findClass(name)            name  ,     java.lang.Class   
                       findLoadedClass(name)      name        ,     java.lang.Class   
                       resolveClass(Class> c)       Java 




         Java       
              (        )             (                              )              


              :
                             -->                            -->      Class  


              :
                      :
                                 :  1.  Class        
                                           2.              ,          ,               
                                :    Java    ,eg:             
                                :            
                                 :          ,  ,        
                      :
                                       ---  static         ,   :final    !!!
                                   1.        --- static  
                                   2.          (  :        ,8              eg: static int a = 10,       a      0,    ,    10 )
                                   3.  final  ,       (eg:final static int a = 10 ,         a    10)
                      :
                                       
                                   1.    :             
                                   2.    :                 


               :
                    1.                      (    ,static        ,            )
                    2.          ,           (static    ,static     ,      )






22.Java               
             :                  ,            ,                    ,         ,
                      Java           ,             
                       ?
                 1、               。                         。
                 2、               (       Ability  )。
                 3、               ,              。
                 4、                          。          ,                        。
                          ?
                 1、            ,           。
                 2、              ,            。
                 3、                           ,            。
                 4、                  。     ,          ,                ,            。                ,            。




23.JVM         ---  JVM       !!!     ---           !!!
                     1.       , JVM         JVM           !!!
                     2.   JVM      ,              
                       :
                          http://blog.csdn.net/column/details/14217.html


           :        ---        !!!              --->                   !!!
                               、    、    ,               


            :
                              ,        ,              ,       ,  JVM          ,           
                                 ,                      


              :
                    :          
                         eg:    ,          ,    ,returnAddress  
                          Java      class   ,             


                    :
                                                       ( 0  ),       ( static  ),        0    this,
                                    this.name ......   






             :
                       :http://blog.csdn.net/eric_sunah/article/details/8014865
                         :
                               ,               ,                   ,
                              A          B   ,                B           ,
                                        B       ,                       ,                !
                      :
                            :
                                                          ,           
                            :
                                              ,          




                    A                                                B


                                                                        
                                          A       
                                                                        
                                          B       
                                                                        
                                                
                                                                        






               
                 1.    :                    
                 2.    :             
                   :
                     1.          ,        ,               !!!
                               ,     PC            ,
                               ,             
                     2.                            !!!
                                  :
                                               ,      ,                   ,
                                PC                    






24.JVM            
         1.JVM            http://blog.csdn.net/eric_sunah/article/details/7862114
                 1.JVM      
                        -Xms            
                        -Xmx            
                        -Xss             
                        -Xmn          
                        eg:
                           java -Xmx4096m -Xms4096m -Xmn2g -Xss128k
                            
                           java -Xmx4g -Xms4g -Xmn2g -Xss128k
                             JVM        4096M,     4096M(-Xms   -Xmx  ,            JVM      )


                             JVM      2G       JVM     =        +       +      
                                                                 64m,        ,         。           ,         3/8


                                      128k
                                                       JDK5+      1M,        ,           ,                  ,     5000
                                                               ,        ,   StackOverflow !!!             1:4


                           -XX:MaxPermSize=64m           64M


                           -XX:MaxTenuringThreshold=0:        


                          :
                               1,        ,       。          Eden    Survivor 。


                               2,   :
                               -XX:NewSize (for 1.3/1.4) ,
                               -XX:MaxNewSize (for 1.3/1.4) ,
                               -Xmn


                               2,   :
                               -XX:PermSize
                               -XX:MaxPermSize


                               3,          :
                               -XX:NewRatio(          ,    ,     )
                                   -XX:+UseConcMarkSweepGC ,  -XX:NewRatio=4  ,      -Xmn       


                               4,Eden Survivor   
                               -XX:SurvivorRatio(Eden    Survivor    ,Eden  )


                 2.GC    
                                        ---        ,      
                                      eg:
                                          -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
                                            :
                                                -XX:+UseParallelGC:             。          。      ,         ,            
                                                -XX:ParallelGCThreads=20:           , :               。              
                                                -XX:+UseParallelOldGC:                ,JDK6.0          




                                        ---         ,        ,            ,             
                                      eg:
                                          java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
                                          -XX:+UseConcMarkSweepGC:          。         ,-XX:NewRatio=4      ,    。  ,          -Xmn  。
                                          -XX:+UseParNewGC:          。  CMS      。JDK5.0  ,JVM           ,         。


                 3.      
                          
                           -Xms:     
                           -Xmx:     
                           -XX:NewSize=n:       
                           -XX:NewRatio=n:            。 : 3,            1:3,              1/4
                           -XX:SurvivorRatio=n:    Eden    Survivor    。  Survivor    。 :3,  Eden:Survivor=3:2,  Survivor        1/5
                           -XX:MaxPermSize=n:       
                            
                           -XX:+UseSerialGC:       
                           -XX:+UseParallelGC:       
                           -XX:+UseParalledlOldGC:          
                           -XX:+UseConcMarkSweepGC:       
                               
                           -XX:+PrintGC
                           -XX:+PrintGCDetails
                           -XX:+PrintGCTimeStamps
                           -Xloggc:filename
                              
                           -XX:ParallelGCThreads=n:             CPU 。       。
                           -XX:MaxGCPauseMillis=n:            
                           -XX:GCTimeRatio=n:                   。   1/(1+n)
                              
                           -XX:+CMSIncrementalMode:       。    CPU  。
                           -XX:ParallelGCThreads=n:                    ,   CPU 。       。


                 4.    
                              
                                    :     ,               (        )。      ,               。  ,          。
                                   :       ,    Gbit   。           ,          ,    8CPU     。
                              
                                    :          ,           ,                      。
                                      ,         、                       ;
                                    ,          。      ,            :
                                           
                                            
                                     GC  
                                                    
                                             ,          
                                   :                             。   ,                 ,
                                      ,             。
                                 
                                          、    ,          。       ,            ,            。
                             ,       ,        ,    “  ”,               ,           ,
                                    、        。    “  ”,          :
                               -XX:+UseCMSCompactAtFullCollection:        ,         。
                               -XX:CMSFullGCsBeforeCompaction=0:          ,       Full GC ,        




         2.JVM           ---  OutOfMemoryError      Exception,   Throwable
                       1.          ---        ,     ,  GC    ,              Java heap space
                              eg:           
                                  1.                   -Xms20m -Xmx20m
                                  2.         ,  GC  
                                     public static void main(String[] args) {
                                             headOutOfMemory();
                                         }


                                         /*
                                          * -verbose:gc -XX:+PrintGCDetails -verbose:gc
                                          * -XX:+HeapDumpOnOutOfMemoryError
                                          *
                                          * -Xms20m -Xms20m
                                          *
                                          */
                                         static void headOutOfMemory() {
                                             long count = 0;
                                             try {


                                                 List objects = new ArrayList();
                                                 while (true) {
                                                     count++;
                                                     objects.add(new Object());
                                                 }
                                             } catch (Throwable ex) {
                                                 System.out.println(count);
                                                 ex.printStackTrace();
                                             }
                                         }


                                     }


                                      :
                                          java.lang.OutOfMemoryError: Java heap space




                       2.        ---         (     (      ,    ,returnAddress  ),    ,    ,      ),
                                           1.StackOverflowError     ----                   ,   StackOverflowError
                                                         ,          ,          ,  StackOverflowError
                                                      eg:
                                                                 
                                                         1.           -Xss4k
                                                         2.      
                                                           public class JVMStackSOF {
                                                           /**
                                                                * (1)  hotspot           (-Xss)      (-Xoss),    Xss     ,         
                                                                *
                                                                * (2)
                                                                *   StackOverflowError->VirtualMachineError->Error
                                                                * ->Throwable,  catch      Exception          Stack length    -Xss         
                                                                */
                                                               private int    stackNumber1    = 1;
                                                               public void stackLeck1() {
                                                                   stackNumber1++;
                                                                   stackLeck1();
                                                               }


                                                               public static void main(String[] args) {
                                                                   JVMStackSOF jvmStackSOF = new JVMStackSOF();
                                                                   try {


                                                                       jvmStackSOF.stackLeck1();
                                                                   } catch (Throwable ex) {
                                                                       System.out.println("Stack length:" + jvmStackSOF.stackNumber1);
                                                                       ex.printStackTrace();
                                                                   }
                                                               }


                                                           }


                                                             :
                                                                 java.lang.StackOverflowError




                                           2.OutOfMemoryError       ----        ,  OutOfMemoryError
                                                      JVM ,       , OutOfMemoryError
                                                      eg:
                                                            JVM   
                                                         1.JVM        ,            
                                                         2.            ( 、        )
                                                         3.  -Xss          ,            
                                                           public class JVMStackOOM {


                                                               /**
                                                                * (1)       ,  OS              ,     +     =(   -     (X  )-       (
                                                                * MaxPermSize)),       ,          ,               ,                     ,
                                                                *     OutOfMemoryException
                                                                * (2)   window       ,java                  ,         ,         (         )
                                                                */
                                                               private static volatile int    threadNumber    = 0;


                                                               public void stackLeakByThread() {
                                                                   while (true) {
                                                                       new Thread() {
                                                                           public void run() {
                                                                               threadNumber++;
                                                                               while (true) {
                                                                                   System.out.println(Thread.currentThread());
                                                                               }
                                                                           }
                                                                       }.start();
                                                                   }
                                                               }


                                                               public static void main(String[] args) {
                                                                   JVMStackOOM jvmStackOOM = new JVMStackOOM();
                                                                   try {
                                                                       jvmStackOOM.stackLeakByThread();
                                                                   } catch (Throwable ex) {
                                                                       System.out.println(JVMStackOOM.threadNumber);
                                                                       ex.printStackTrace();
                                                                   }
                                                               }
                                                           }


                                                               :
                                                         java.lang.OutOfMemoryError:unable to create new native thread




                       3.     
                                      :  JVM      ,  ,      ,    ,          
                                       :
                                           java.lang.OutOfMemoryError: PermGen space
                                   eg:
                                               
                                     1.                 
                                     2.    -XX:PermSize=10m --XX:MaxPermSize=10m,          


                                     import java.lang.reflect.Method;


                                     import net.sf.cglib.proxy.Enhancer;
                                     import net.sf.cglib.proxy.MethodInterceptor;
                                     import net.sf.cglib.proxy.MethodProxy;


                                     /*
                                      *   CGLib         Class,  Class            ,                OOM
                                      *
                                      *
                                      * -XX:PermSize=10m -XX:MaxPermSize=10m
                                      * */
                                     public class MethodAreaOOM {
                                         static class Test {}


                                         public static void main(String[] args) {
                                             try{


                                             while (true) {
                                                 Enhancer enhancer = new Enhancer();
                                                 enhancer.setSuperclass(Test.class);
                                                 enhancer.setUseCache(false);
                                                 enhancer.setCallback(new MethodInterceptor() {


                                                     @Override
                                                     public Object intercept(Object arg0, Method method, Object[] arg2, MethodProxy proxy) throws Throwable {
                                                         return proxy.invokeSuper(arg0, arg2);
                                                     }
                                                 });
                                                 System.out.println(enhancer.create());


                                             }
                                             }catch(Throwable th){
                                                 th.printStackTrace();
                                             }
                                         }
                                     }


                                         :java.lang.OutOfMemoryError: PermGen space


25.JVM         
         1.    
                 1.     Eden    
                 2.           
                      -XX:PretenureSizeThreshold                 
                 3.              
                      -XX:MaxTenuringThreshold         ,    gc       


                 JVM             ,
                          Eden        Minor GC     ,   Survivor  ,    Survivor   ,
                             1,   Survivor      Minor GC,  +1,
                              (  15,   -XX:MaxTenuringThreshold  ) ,       


         2.    
                 1.Minor GC           GC, JVM             ,  Minor GC,       ,          ,  Minor GC     ,      
                                   :
                                        Eden   ,  Minor GC


                 2.Full GC            GC
                                   :
                                       1.  System.gc(),      Full GC,      
                                       2.       
                                       3.       
                                       4.  Minor GC             ,           
                                       5. Eden 、From Space  To Space    ,      To Space    ,           ,