2012年4月16日 星期一

Jjava 記憶體參數說明

JVM的記憶體空間如下:

(出處:http://www.sapgeek.net/2010/11/java-jvm-memory-structure/)



METHOD AREA:存放要載入類別的各種資訊,當要使用的記憶體超出允許的大小時,會抛出OutOfMemory的錯誤資訊,在JDK中這塊區域對應Permanet Generation,預設最小值為16MB,最大值為64MB,可透過-XX:PermSize及-XX:MaxPermSize來指定最小值和最大值!

HEAP:Heap用於儲存物件實例及陣列值,可認為Java中所有透過new建立物件都在此分配,在32bit電腦上最大限制為2GB,64bit無此限制,可透過-Xms和-Xmx控制!HEAP有包含New Generation及Old Generation:

  • New Generation:可透過-Xmn指定大小
  • Old Generation:即-Xmx減去-Xmn的大小
NATIVE METHOD STACK:儲存每個native method呼叫的狀態,如C

JAVA STACK & PROGRAM COUNTER REGISTER:PC REGISTER存放的為CPU暫存器或OS記憶體;JAVA STACK存放的為OS記憶體,當JAVA STACK不足時會抛出StackOverflowError,可透過-Xss指定大小!

JDK參數設定策略:

一般設置: 

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx3550m:設置JVM最大可用記憶體為3550M.
-Xms3550m:設置JVM促使記憶體為3550m.此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體.
-Xmn2g:設置New Generation大小為2G.整個stack大小 = New Generation + Old Generation
!此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8!
-Xss128k:設置每個執行緒的Stack大小。JDK5.0以後每個執行緒Stack大小為1M,以前每個執行緒Stack大小為256K!更具應用的執行緒所需記憶體大小進行調整。在相同實體記憶體下!減小這個值能生成更多的執行緒。但是作業系統對一個進程內的執行緒數還是有限制的。不能無限生成,大約在3000~5000左右。


java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4
:設置New Generation (包括Eden和兩個Survivor區)與Old Generation的比值.設置為4,則New Generation與Old Generation所占比值為1:4,New Generation占整個Stack的1/5。
-XX:SurvivorRatio=4:將New Generation中Eden區與Survivor區的大小比值設置為4,則兩個Survivor區與一個Eden區的比值為2:4,一個Survivor區占整個New Generation的1/6。
-XX:MaxPermSize=16m
:設置Permanet Generation大小為16m。
-XX:MaxTenuringThreshold=0:設置垃圾最大年齡.如果設置為0的話,則New Generation物件不經過Survivor區,直接進入Old Generation。對於Old Generation有比較多的應用話可以提高效率。如果將此值設置為一個較大值,則New Generation物件會在Survivor區進行多次複製,這樣可以增加物件再New Generation的存活時間,減少在New Generation即被回收的概論。

2012年2月9日 星期四

Eclipse SVN帳密儲存位置

Eclipse在使用SVN時會要求記錄帳密,但如果以後要更換帳密怎麼辦呢?
Eclipse並沒有提供更換帳密的介面,所以要自己把Eclipse儲存的帳號刪除!
以Windows7為例儲存位置就在"C:\Users\登入帳號\AppData\Roaming\Subversion\auth\svn.simple"
AppData的資料夾預設會被隱藏,所以必須要在檔案總管顯示可看見隱藏的系統資料夾才行喔!

2011年11月28日 星期一

利用 java進行中文字轉碼

翻譯國外程式變成中文版時,一般程式使用 utf-8碼,但是中文通常用big5 碼
此時翻譯的 中文檔案 需要先轉碼後才可以正確使用 否則會變成亂碼
可用以下方式:
利用 java native2ascii 程式:
需要安裝 任何一版 java SDK
於 安裝目錄下假設為 c:\java
則 java\bin\ 有一 nativeascii 程式 可轉碼
假設原本檔案為 mydata.txt 要轉為 utf-8 輸出為 mydata_utf8.txt 請執行以下指令
java\bin\native2ascii -encoding big5 mydata.txt mydata_utf8.txt即可
若想將轉換後 utf-8檔 變回 big5檔 ,執行以下指令
java\bin\native2ascii -reverse -encoding big5 mydata_utf8.txt mydata.txt
native2ascii原文網址