摘要:
每一種收集器的日志形式都是由它們自身的實現所決定的,換而言之,每個收集器的日志格式都可以不一樣。但虛擬機設計者為了方便用戶閱讀,將各個收集器的日志都維持一定的共性,例如以下兩段典型的GC日志: 33.125: [GC [DefNew: 3324K->152K(3712K), 0.0025925 se
閱讀全文
posted @ 2016-11-22 22:20
kosamino
閱讀(461)
推薦(0)
摘要:
分代式GC里,年老代常用mark-sweep;或者是mark-sweep/mark-compact的混合方式,一般情況下用mark-sweep,統計估算碎片量達到一定程度時用mark-compact。這是因為傳統上大家認為年老代的對象可能會長時間存活且存活率高,或者是比較大,這樣拷貝起來不劃算,還不
閱讀全文
posted @ 2016-11-18 00:33
kosamino
閱讀(1848)
推薦(0)
摘要:
每個人都知道,各種各樣的動畫視頻,都是由一幀一幀圖片連續切換結果的結果而產生的,其實虛擬機的運行和動畫也類似,每個在虛擬機中運行的程序也是由許多的幀的切換產生的結果,只是這些幀里面存放的是方法的局部變量,操作數棧,動態鏈接,方法返回地址和一些額外的附加信息組成,在虛擬機中包含這些信息的幀稱為“棧幀”
閱讀全文
posted @ 2016-11-18 00:24
kosamino
閱讀(2108)
推薦(0)
摘要:
HotSpot JVM收集器 上面有7中收集器,分為兩塊,上面為新生代收集器,下面是老年代收集器。如果兩個收集器之間存在連線,就說明它們可以搭配使用。 并發和并行 先解釋下什么是垃圾收集器的上下文語境中的并行和并發: 并行(Parallel):指多條垃圾收集器線程并行工作,但此時用戶線程仍然處于等待
閱讀全文
posted @ 2016-11-16 23:31
kosamino
閱讀(2014)
推薦(2)
摘要:
1.枚舉根節點 在可達性分析中,可以作為GC Roots的節點有很多,但是現在很多應用僅僅方法區就有上百MB,如果逐個檢查的話,效率就會變得不可接受。 而且,可達性分析必須在一個一致性的快照中進行-即整個分析期間,系統就像凍結了一樣。否則如果一邊分析,系統一邊動態表化,得到的結果就沒有準確性。這就導
閱讀全文
posted @ 2016-11-16 22:26
kosamino
閱讀(1019)
推薦(0)
摘要:
1.標記-清除算法 對所有存活對象進行一次全局遍歷來確定哪些對象可以回收,遍歷的過程從根出發,找到所有可達對象,除此之外,其它不可達的對象就是垃圾對象,可被回收。整個過程分為兩個階段:標記階段找到所有存活對象;清除階段清除所有垃圾對象。 優點:采用的可達性分析算法,相比較引用計數算法,標記-清除算法
閱讀全文
posted @ 2016-11-16 21:59
kosamino
閱讀(389)
推薦(0)
摘要:
1.概述 Java內存運行時區域的各個部分里: 其中程序計數器、虛擬機棧、本地方法棧3各區域隨線程而生,隨線程而滅。棧中的棧幀隨著方法的進入和退出而有條不紊地執行著出棧和入棧操作。每個棧幀中分配多少內存基本上是在類結構定下來是就已知了,因此這幾個區域的內存分配和回收都具備確定性,不需過多考慮。 而堆
閱讀全文
posted @ 2016-11-15 23:28
kosamino
閱讀(480)
推薦(0)
摘要:
1. 對象的創建 虛擬機遇到一條new指令時,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,并且檢查這個符號引用代表的類是否已被加載、解析和初始化過。如果沒有,那必須先執行相應的類加載過程,在類的加載檢查通過后,接下來java虛擬機會為新生對象會在堆中劃分出一定的內存。對象所需內
閱讀全文
posted @ 2016-11-15 21:33
kosamino
閱讀(315)
推薦(1)
摘要:
Java虛擬機在執行java程序的過程中會把他管理的內存劃分為若干個不同的數據區域各自用途、創建以及銷毀時間各不相同。有的隨著虛擬機進行的啟動而存在,有的區域依賴于線程的啟動和結束而建立以及銷毀。如圖: 1.程序計數器 Jvm將這個計數看作當前線程(意味著只能支持單線程)執行某條字節碼的行號指示器,
閱讀全文
posted @ 2016-11-02 01:42
kosamino
閱讀(522)
推薦(0)
摘要:
首先要搞明白什么叫執行計劃? 執行計劃是數據庫根據SQL語句和相關表的統計信息作出的一個查詢方案,這個方案是由查詢優化器自動分析產生的,比如一條SQL語句如果用來從一個 10萬條記錄的表中查1條記錄,那查詢優化器會選擇“索引查找”方式,如果該表進行了歸檔,當前只剩下5000條記錄了,那查詢優化器就會
閱讀全文
posted @ 2016-10-25 00:02
kosamino
閱讀(370)
推薦(0)
摘要:
附:本博文記錄反射基礎知識,擴展請參見反射目錄下的其余博文。 一.通過一個對象獲得完整的包名和類名 方法:class.getClass().getName()。 二.實例化Class類對象 有三種方法: 1.推薦此種方式進行構建類:Class.forName("className"); 2.java
閱讀全文
posted @ 2016-10-20 01:22
kosamino
閱讀(521)
推薦(0)
摘要:
一.簡介 在一般情況下,創建一個線程是不能提高程序的執行效率的,所以要創建多個線程。但是多個線程同時運行的時候可能調用線程函數,在多個線程同時對同一個內存地址進行寫入,由于CPU時間調度上的問題,寫入數據會被多次的覆蓋,所以就要使線程同步。 線程同步:即當有一個線程在對內存進行操作時,其他線程都不可
閱讀全文
posted @ 2016-10-11 02:32
kosamino
閱讀(315)
推薦(0)
摘要:
一.產生死鎖的四個必要條件: (1) 互斥條件:一個資源每次只能被一個進程使用。(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。 二
閱讀全文
posted @ 2016-10-11 01:51
kosamino
閱讀(33028)
推薦(0)
摘要:
對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。 sleep()方法導致了程序暫停執行指定的時間,讓出cpu給其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。 在調用sleep()方法的過程中,線程不會
閱讀全文
posted @ 2016-10-08 23:16
kosamino
閱讀(302)
推薦(0)
摘要:
一.線程的基本概念 1.線程是一個程序內部的順序控制流。 2.Java的線程是通過java.lang.Thread類來實現的。 3.VM啟動時會有一個由主方法{public static void main(Args[] String)}所定義的線程。 4.可以通過創建新的Thread實例來創建新的
閱讀全文
posted @ 2016-09-30 00:59
kosamino
閱讀(538)
推薦(0)