ByteBuffer

runtime data area

1.method area(共享)
2.heap  (共享)
3.java stack(非)
4.native method stack(非)
5.program couter register(非)

method frame(stack frame)

從heap角度

1.heap      //
    young gen(eden + survivor0 + survivor 2) + old gen.
2.non-heap
    perm | metaspace
3.off-heap
    jvm以外的內容

jvm調優

-Xmx
-Xms
-Xmn        //young 
-XX:NewSize=
-XX:MaxNewSize=

java -Xmx xx.x.xx.Appjava

反射

動態訪問對象的屬性和方法。
Class           //類
Method          //方法,成員函數
Field           //字段,成員變量
Constructor     //構造函數

private

Field[] fs = getDeclaredFields() for(Field f : fs){ get + "" }web

內省

Introspector.
操做javabean。

設計模式

單例(無狀態)
池化模式(無狀態)
裝飾
適配器
builder
factory
代理模式.

反射技術.

Introspector:       //JavaBean

動態訪問對象屬性和方法。
Class       //
Method      //
Field       //
Constructor //

IO

InputStream     //read
OuputStream     //write

Reader          //
Writer          //字符流

BufferedInpustStream    //
BufferedOutputStream    //

BufferedReader
BufferedWriter

InputStreamReader
ObjectInputStream
ObjectOutputStream

ByteArrayInputStream
ByteArrayOutputStream

NIO:New IO

ServerSocket ss = new ServerSocket(8888);
//阻塞的
while(true){
    Socket s = ss.accept();
    InputStream is = s.getInputStream();
    //阻塞的
    while(true){
        is.read(buf);
    }
    ...
}

NIO : java.nio.Buffer

[java.nio.Buffer]
容器,線性的,有限的.
Capacity            //容量
limit               //限制
position            //指針位置
mark                //記號(標記)

//分配字節緩衝區
ByteBuffer buf = ByteBuffer.allocate(20);       //
ByteBuffer buf = ByteBuffer.allocateDirect(20); //直接內存(離堆)

java.nio.ByteBuffer
        /\
         |--------------java.nio.HeapByteBuffer         //堆內存區
         |--------------java.nio.DirectByteBuffer       //離堆內存區.

    get()   //讀
    put()   //寫

    position()      //取出指針位置
    position(int )  //設置指針新位置
    limit()         //設置指針新位置
    limit(int l)    //設置新limit

    flip()          //

    0 <= mark <= position <= limit <= capacity

GC

garbage collection,垃圾回收。
對象回收的條件:沒有任何一個指針可以直接或間接達到的話,就回收了。
Person p = new Person();
Person p2 = p ;
p = null ;

List<Person> list = new ArrayList<Person>();
list.add(p2);
p2 = null ;

list.clear();

ByteBuffer.flip()設計模式

java.nio.ByteBuffer中flip、rewind、clear方法的區別jvm

對緩衝區的讀寫操做首先要知道緩衝區的下限、上限和當前位置。下面這些變量的值對Buffer類中的某些操做有着相當重要的做用:函數

1. limit:全部對Buffer讀寫操做都會以limit變量的值做爲上限。ui

2. position:表明對緩衝區進行讀寫時,當前遊標的位置。this

3. capacity:表明緩衝區的最大容量(通常新建一個緩衝區的時候,limit的值和capacity的值默認是相等的)。spa

flip、rewind、clear這三個方法即是用來設置這些值的。設計

clear方法
 public final Buffer clear() { position = 0; //重置當前讀寫位置 limit = capacity; mark = -1; //取消標記 return this; } 

clear方法將緩衝區清空,通常是在從新寫緩衝區時調用。代理

flip方法

public final Buffer flip() { limit = position; position = 0; mark = -1; return this; }

反轉緩衝區。首先將限制設置爲當前位置,而後將位置設置爲 0。若是已定義了標記,則丟棄該標記。 常與compact方法一塊兒使用。一般狀況下,在準備從緩衝區中讀取數據時調用flip方法。

rewind方法

1public final Buffer rewind() { 2 position = 0; 3 mark = -1; 4 return this; 5}
相關文章
相關標籤/搜索