原创 [APUE]再讀之高級IO

1. 非阻塞IO。 阻塞IO有如下情況 。 數據不存在,  則讀操作永遠阻塞。典型的爲 管道操作。 。 數據不能被立即接受,寫這樣的文件會被阻塞。 。 打開文件會被阻塞。(典型爲調制解調器。只寫方式打開FIFO,要等待一個讀進程) 。 對

原创 [APUE] 再讀之進程環境

本章節講訴整個進程生命週期的方方面面,包括main 函數,進程終止方式,命令行參數,內存佈局,動態庫靜態庫,環境變量以及資源操作。順帶還解釋了longjmp,setjmp函數,以及幾種變量類型。 1. main 函數 int main(

原创 Java NIO 隨筆

從C那邊轉過來學習java 的NIO,相對來說還是容易些。也更願意把C底層的socket和Java NIO做些比較。 Java NIO的核心部件: Channels對應於socket 的文件句柄 Selectors對應於socket的

原创 Java Atomic變量

Atomic 變量具有原子化 下面代碼片段中,isSet 原子化操作,可以防止在多線程環境中線程被起動多次 import java.util.concurrent.atomic.AtomicBoolean; import java.ut

原创 Java 對象Serializable

Java Serializable概述 Java 提供了把Java對象虛擬化爲二進制流的Serializable接口。Serializable的作用有: 1. 保存Java內存鏡像中的對象到二進制流。 2. 用於進程間通信,比如socke

原创 資源監控工具Munin

Munin 是一款優秀的性能監控工具,採用client-server模式,支持同時監控多個節點,並且以web的方式展現出來。 Munin 功能介紹 Munin 可監控服務器的所有方面,包括最重要的CPU,MEMORY,DISK,IO等等

原创 記一次JAVA程序的性能調優

背景 筆者最近一個階段做一個大數據方面的項目。和其他大數據項目使用Spark,ES不同,這個項目使用存文件的方式。 寫文件時把用戶所需要的數據全部準備好,典型的以磁盤空間換用戶查詢時間的方式。 大概流程如下:數據進來-->原始數據落磁盤-

原创 JAVA NIO

Java 提供了NIO概念,也即是非阻塞IO概念。並引入了對文件和socket的一些封裝。本文將詳細介紹NIO。 Channel Channel 本質上實現了對句柄的封裝。Linux系統中用一個正式fd來描述文件或者網絡套接字的唯一封裝

原创 Java 泛型extends和super

這個常常讓人很迷惑,其實只要記住就可以了。 當需要讀的時候,用extends,這樣可以保證元素都有基類的屬性。當需要寫的時候,用super。

原创 Java的類加載機制

Java 類加載過程 1. 加載. 把.class二進制文件讀入內存。 2. 鏈接 驗證。 驗證正確性,和我們自己寫函數要驗證入參一樣,必須驗證該類爲正確以後才能繼續。否則會造成程序崩潰準備。分配靜態變量內存空間解析。 解析出類中符號

原创 詳解Java 類的初始化

論壇中看到一道很有意思的代碼,關於類的初始化順序,這邊嘗試分析下。 Java類的初始化順序 1 繼承體系的所有靜態成員初始化(先父類,後子類) 2 父類初始化完成(普通成員的初始化-->構造函數的調用) 3 子類初始化(普通成員

原创 Java String詳解

背景知識1: Java的內存區域分爲,靜態區存放靜態變量,堆區,棧區,靜態區,和不可變的方法區。 Java的八種基本變量和引用的句柄都直接放在棧區。棧區的好處是訪問快,效率高,但是申請的內存必須是確定的。放在C中的意思就是,靜態分配的內存

原创 Java 多態

本文對Java 多態,繼承,重載(overload),重寫(override)技術做一個簡單小結。 繼承 繼承指子類繼承父類,或者子接口繼承父接口。使用extends。 實現是指類實現接口方法,使用implements. 重載 重載指

原创 VisualVM 遠程監控jmx程序

VisualVM 是一款可以安裝很多插件,一款集大成的Java性能監控工具。 目前網上很多關於VisualVM遠程監控的配置都比較簡單,而且說的不清楚,往往讀者不能從這些文章中配置自己的監控環境。 筆者經過一番摸索後,爬過一些坑,詳細記錄

原创 Java Immutable不可變類

不可變類 Java 不可變類指的是,該類變量一旦被初始化就無法改變的類。 不可變類的優點: 線程安全(因爲不可變)效率更高 (多線程無需加鎖)可以被重複使用,而不擔心出錯。比方說那一個靜態變量存儲該實例的hash值。Immutalbe