2012年7月27日 星期五

(暫存) 限制下載速度

參考連結:
1、程式碼分享 - 限制下載速度

最佳化 Java File I/O

[1] 這篇文章是研究怎樣讀取檔案最快的開箱文 (?!)
一開始先說明了 Java 常用的 14 種讀取檔案的方法,並簡單說明主要的優點(例如有沒有 thread-safety)
然後開始做各種方法的效率測試。

2012年7月26日 星期四

使用 Java 發送 HTTP Request

要在程式裡面模擬瀏覽器的行為是很常見的需求
不管是要做爬蟲,還是是要無縫連接網際網路的服務,都需要利用程式來實作瀏覽器的動作。
雖然上週才剛發一篇 Android HTTP POST
但因為 Android 函式庫本身已經內含 Apache 的 HttpClient 套件,所以實作起來稍微簡單一點
而在純 Java Application 的環境中,如果沒辦法用 Apache 的套件的話,就必須自己用別的方法處理了。

參考資料:
1、java HttpURLConnection來實作get及post動作
2、HTTPURLConnection

2012年7月24日 星期二

自行觸發 jQuery Validation 的表單驗證

這是個無聊的記錄 XD
當遇到有任何需要,必須強制由程式碼自行觸發 validator 的驗證事件時
可以直接呼叫 valid() 函式,同時 valid() 會回應驗證結果(true/false)。
$("#form").valid();


參考資料:jQuery Validation

在 Linux 上偵測系統頻寬

原本有找到 nmon 這個工具可以在 Linux 上偵測頻寬
在 Linux 監控系統資源:nmon for Linux
不過它好像只有直接執行 nmon 觀察,才會有 peak 的數據出現
如果要輸出成檔案時,nmon 只會輸出當下的流量數據,這樣就無法達成原本的需求了。
在看 nmon 輸出的資料時,發現在網路的部份它似乎也只是去分析 /proc/net/dev 提供的資訊
例如現在去看 /proc/net/dev,顯示累計傳輸了 N Bytes
一秒之後再看一次 /proc/net/dev,會顯示累計傳輸 N+M Bytes
因此可以算出這 1 秒的流量是 M Byte/s。
既然 nmon 實際上也只是輸出 /proc/net/dev 的數據,那其實直接自己去查詢 /proc/net/dev 就好了!

2012年7月20日 星期五

在 Linux 監控系統資源:nmon for Linux

官方網站:nmon for Linux
線上文件:Document

要把監視的結果輸出成檔案可以用:
nmon -f -N -m 輸出資料夾
nmon 就會在指定的資料夾裡面產生輸出的檔案
輸出檔名的格式是 _YYYYMMDD_HHMM.nmon。

不過目前覺得輸出的資料太多了,我只需要其中幾個值而已
所以還在搜尋要如何只讓 nmon 輸出少部分的資料....
如果沒辦法的話,可能就只能在看輸出的記錄時自己寫篩選器了。

2012年7月18日 星期三

2012年7月14日 星期六

(暫存) 實現像 Google Play 那樣左右滑動換頁的方法

可以使用 ViewPager:http://developer.android.com/reference/android/support/v4/view/ViewPager.html

2012年7月11日 星期三

筆記:JVM 的記憶體管理

JVM 規範的記憶體空間結構如下圖:

註:圖片轉載自 [2]

Heap
Heap 用來儲存物件的實例以及陣列值,可以視為所有用 new 關鍵字建立的物件,記憶體都會分配在 Heap 區域中。
Heap 預設的最小值是實體記憶體的 1/64,但小於 1GB;最大值是實體記憶體的 1/4,但小於 1GB。
最大值可以透過 -Xmx 參數來設定;最小值則透過 -Xms 設定。

當 JVM 目前的 Heap 空間使用率超過 60% 時,JVM 會自動增加 Heap 的空間;
而當使用率低於 40% 時,JVM 會自動減少 Heap 的空間。
要改變比例的話,可以透過 -XX:MinHeapFreeRatio、-XX:MaxHeapFreeRatio 改變比例
要注意的是參數是用閒置比例來計算的,因此假設 MinHeapFreeRatio 設定為 30% 的話
是表示閒置記憶體低於 30%,亦即記憶體使用率超過 70%,JVM 會增加 Heap 的記憶體空間。

在 Java 1.2 版以後,為了提昇 Heap 記憶體的使用效率,JVM 使用了分代管理(Generations)的機制來管理 Heap 記憶體空間,即將 Heap 分成三個世代,如下圖。



註:圖片轉載自 [6]

(1) 新生代(Young Generation)

(2) 舊生代(Old Generation)

(3) 方法區(Permanent Generation)
方法區存放類別的資訊(名稱、修飾符)、靜態變數、常數(定義為 final 的變數)等等。
Permanent Generation 在一定條件下會被 GC,但一般狀況下 GC 不會影響到 Permanent Generation。
而且根據 [6] 的描述,看起來官方似乎也不建議 GC 方法區的樣子?(不太確定,其實官方也只是用詞看起來不太建議,但並沒有明說 XD)
根據 [3] 回應的描述,Permanent Generation 當中會存放 class 對應到 Heap 裡的位置,如下圖。



註:圖片轉載自 [4]

在 JVM 當中可以透過 -XX:PermSize 及 -XX:MaxPermSize 來指定大小,預設最小值為 16MB、最大值為 64MB。


參考資料:
1、[書目] Java 分散式處理實務精要:奠定雲端基礎的 63 個思考術
2、JVM内存模型
3、In Java is Permanent Generation space garbage collected?
4、Presenting the Permanent Generation
5、Pick up performance with generational garbage collection
6、Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1

JVM学习总结(转载)

2012年7月8日 星期日