Java應急 知識

  1. 通配符相關:
    首先我們要明白類型擦出是怎麼回事,也就是說,類型的確定是編譯時確定的;編譯時發現你往裏存的對象有問題就報錯;如果運行了你通過反射強制向裏面添加元素其實是隨便的;
    < T >表示某種類型,比如Integer;< ? >表示不知道具體那種類型;< T >簡單啊,你添加,讀取都是T類型;?呢,不知道是哪種類型,能放進去嗎?顯然不能啊,你總不能把電視和地球放在一起把,這樣會很奇怪;但是?讀取,就會很方便,因爲集合裏已經有了這麼一些東西,我管它是啥呢,拿出來就好了;
    以這種思想,我們來看一下上下界通配符;
    < ? extend A> 也就是T是個A的子類,那是哪個呢?很顯然,你沒辦法向裏面儲存A的全部子類吧;比如T是個A的其中大兒子的兒子;那麼A小兒子的兒子,很顯然存不進去的嘛;但是反過來我不管T是哪個類,它總可以向上轉型爲A,所以就可以讀取並轉型爲A;(不可轉型爲A的子類);
    < ? super B> 就是說T是B得一個父類,那麼很顯然的,存什麼我都可以把它轉型爲T嘛,因爲T是B的父類嘛;但是當你讀取的時候,T?B的父類,那是個什麼玩意,到底是父親,還是爺爺,還是Object呢?所以無法讀取;除非你讀取轉型爲Object;

  2. 線程的狀態

    1. 正常運行的一種狀態
    2. 阻塞掉了,阻塞就分爲三種了,一種是等待阻塞wait,就是等待有人喚醒了,一種是同步阻塞,等待鎖的到來(線程當前活着呢);一種就是io請求啊,sleep啊,還有就是join方法;
    3. 對於運行來說,加上cpu的話,就有正在運行,和時間片用完,在外面的等待的情況;
  3. sleep和wait的區別

    1. sleep是線程類Thread的方法,wait是Object的;
    2. sleep是佔着鎖睡覺的,wait是會釋放鎖的;
    3. 一個是線程主動睡覺,另一個則是線程中的對象需要等待;
  4. Synchronized與Lock鎖的區別
    1. Lock的粒度更小,可以嘗試獲取一下鎖,嘗試獲取一段時間,如果你沒有得到鎖的話,也可以做別的事情
    2. 當線程非常多的時候,Lock更加好用;
  5. gc相關
    1. 幾種gc的算法:標記法,對象有一個引用就計數1,如果計數爲0的話,就可以回收了;根搜索標記清除,從根開始訪問對象,給那些能訪問到的標記,剩下的清除;複製算法,從一個區域移到另一個區域,這樣沒有移動的,就是死掉的對象;標記-整理算法,簡單的說,就是先標記,然後向前移動,這樣,另一端的肯定是死翹翹的對象;
    2. 新生代的gc算法;先是伊甸園,然後是兩個存活區;在沒有滿的情況,一個向另一個複製就是複製清除算法,剩下的使用標記-清楚;這叫做minor gc算法;
    3. 年老代,如果新生代地方不夠,就轉移那些還活着的,放在年老代裏;使用標記-整理清楚,叫做full gc /major gc;
    4. 持久代,幾乎不死的那種,使用標記-整理;
  6. 何時gc
    1. 伊甸園不夠,就開始minor jc;
    2. 老年代不夠了;
    3. 持久代不夠了
    4. 新生代上傳到老年代過來的對象太大;
  7. 7.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章