原创 【IO】【NIO】【類圖】

          以上是NIO的代碼以及類圖,對於NIO需要了解以下幾點: 1、一個channel就是一個連接操作,既然操作就需要文件描述符fd,所以無論是severSokcetChnel還是socketChinel他們在創建時

原创 【IO】【java的io讀寫,緩衝區是如何提高讀寫效率的】

據我瞭解,運用FileInputStream讀寫一段數據是一個字節一個字節的讀取,如果有10個字節大小的文件,就要調用10次系統調用,每次將讀取的數據賦值給變量,然後程序使用變量。緩衝區可以看作是一個放在內存中的數組,但是從硬盤中讀取數據

原创 【JVM】【參數】【配置信息】

打印系統參數設置 -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial -XX:+PrintCommandLineFlags Java -server -XX:+PrintFlagsFinal -Xmx1

原创 【JVM】【調優】【FullGC觸發情況】

老年代代空間不足 老年代空間只有在新生代對象轉入及創建爲大對象、大數組時纔會出現不足的現象,當執行Full GC後空間仍然不足,則拋出如下錯誤: java.lang.OutOfMemoryError: Java heap space

原创 【IO】【IO 字節流和字符流】

      字節流     Java中的字節流處理的最基本單位爲單個字節,它通常用來處理二進制數據。Java中最基本的兩個字節流類是InputStream和OutputStream,它們分別代表了組基本的輸入字節流和輸出字節流。In

原创 設計模式原則

單一職責原則   一個類只負責一個功能   2、開閉原則   對修改關閉   對擴展開發   3、里氏代換原則(面向接口或者抽象類)    父類引用可以指向子類對象。程序中儘量使用基類類型對對象進行定義,(Animall p = new

原创 spring—容器啓動載入bean過程

此篇我們分析spring啓動過程中代碼大體的執行邏輯,在此,我們採用工程類的基類來進行分析,即對於以下幾行代碼執行過程中,spring後臺所進行的處理。 客戶端代碼: ClassPathResource res = new Cla

原创 Java虛擬機內存溢出測試

VM運行時數據區域 JVM執行Java程序的過程中,會使用到各種數據區域,這些區域有各自的用途、創建和銷燬時間。根據《Java虛擬機規範(第二版)》(下文稱VM Spec)的規定,JVM包括下列幾個運行時數據區域:   1.程序計數器(P

原创 java垃圾回收器之跟搜索算法

判斷對象已經死。不能通過引用計數算法,因爲他無法解決對象之間相互循環引用的關係。如果兩個對象彼此相互引用,但是在以後再也沒用,那麼豈不是浪費了空間,導致對象無法回收,通常是採用跟搜索算法,以一系列名爲“GV Roots”的對象作爲起始點,

原创 設計模式-外觀模式

本文介紹外觀模式,依然通過簡單的代碼實現來介紹外觀模式: //文件讀取類 public class FilterReader {public void read(String fileName){System.out.println("模

原创 java類和類加載器

虛擬機類加載器機制 Java虛擬機把class二進制類文件加載到內存中,然後經過連接、初始化,當然連接分爲好幾個部分,最終形成虛擬機可以直接使用的java類型語言,這就是虛擬機的類加載機制。 Java語言和其他一些語言不太相同,java類

原创 comparable接口與comparator

作用:這兩個接口可以實現對類對象的集合進行排序   comparable接口: 一個類實現此接口,並實現其中的接口方法,那麼對這個類對象的集合進行排序時候,就可以把此comparable作爲默認的比較方法,進行自定義的升序或者降序集合排列

原创 設計模式之橋接模式

這裏不詳細介紹,只用幾句簡單的話來概括此模式的核心內容。此模式也成爲接口模式,解決了多繼承的帶來的擴展難的問題,而往往由於多繼承而導致了擴展比較 困難的原因往往就是我們在設計類的時候違反了單一職責的原則,或者是沒有從深層次明白什麼叫繼承,

原创 深克隆與淺克隆

產生深克隆與淺克隆的原因是調用clone()方法,對於引用類型變量,克隆出來的對象,克隆的是引用地址,所以在克隆出來對象裏面對這些引用類型變量,進行修改,會影響先前的對象數據。 下面直接貼出代碼,需要注意兩點:clone方法的實現,需要注