1. 程式人生 > >java和ide常用配置

java和ide常用配置

jdk配置

  • windows平臺下jdk配置
JAVA_HOME:    C:\Program Files\Java\jdk1.6.0_02\
Path變數的末尾增加:;%JAVA_HOME%bin 
CLASSPATH:        值為“.”,注意不帶雙引號 
  • linux 環境
    假設在 Linux 中 Java 安裝在/opt/java/jdk6 目錄下,對於使用 bash 的 Linux 來說,在使用者主目錄下,修改.bash_profile 檔案(ubuntu下sudo vi ~/.bashrc),在這個檔案的最末尾增加三行:
export
JAVA_HOME=/opt/java/jdk6 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.

要注意的是,Linux 中的環境變數區分大小寫,因此要注意大小寫不要寫錯。 修改完執行如下命令使更改立即生效:

source ~/.bashrc

tomcat配置

  • windows下 指定jdk
    在setclasspath檔案最上面加上(實際測試中使用apache-tomcat-7.0.88,在setclasspath檔案,catalina檔案,startup檔案任一檔案中指定都可以,JAVA_HOME和JRE_HOME只設置一個就可以)
set JAVA_HOME=C:\Java\jdk1.60 
set JRE_HOME=C:\Java\jre1.60 
  • linux下指定jdk(setclasspath.sh或catalina.sh中寫入):
export JAVA_HOME=/home/manager/java/jdk1.8.0_121 
export JRE_HOME=/home/manager/java/jdk1.8.0_121/jre/ 
  • 設定記憶體大小 (win平臺和linux平臺)
    在catalina檔案上加入上(Xms:初始堆記憶體大小 Xmx:可以使用的最大記憶體)
set JAVA_OPTS=-
Xms256m -Xmx512m

idea配置

  • 使用maven執行時的Runner的VM Options設定
-mx1024m -XX:MaxPermSize=1024m -Drebel.spring_plugin=true -Drebel.hibernate_plugin=true

其中,-Drebel是JRebel的配置
-Xmx Java Heap最大值,預設值為實體記憶體的1/4,最佳設值應該視實體記憶體大小及計算機內其他記憶體開銷而定;

-Xms Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留預設值;

-Xmn Java Heap Young區大小,不熟悉最好保留預設值;
-Xss 每個執行緒的Stack大小,不熟悉最好保留預設值;

PermSize和MaxPermSize指明虛擬機器為java永久生成物件(Permanate generation)如,class物件、方法物件這些可反射(reflective)物件分配記憶體限制,這些記憶體不包括在Heap(堆記憶體)區之中。
-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允許分配尺寸,按需分配

idea New專案時的配置

這裡寫圖片描述

以下為轉載,轉載地址
JVM記憶體區域詳解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

JVM區域總體分兩類,heap區和非heap區。
heap區又分為:
- Eden Space(伊甸園)、
- Survivor Space(倖存者區)、
- Old Gen(老年代)。

非heap區又分:
- Code Cache(程式碼快取區);
- Perm Gen(永久代);
- Jvm Stack(java虛擬機器棧);
- Local Method Statck(本地方法棧);

下面我們對每一個記憶體區域做詳細介紹。
Eden Space字面意思是伊甸園,物件被建立的時候首先放到這個區域,進行垃圾回收後,不能被回收的物件被放入到空的survivor區域。

Survivor Space倖存者區,用於儲存在eden space記憶體區域中經過垃圾回收後沒有被回收的物件。Survivor有兩個,分別為To Survivor、 From Survivor,這個兩個區域的空間大小是一樣的。執行垃圾回收的時候Eden區域不能被回收的物件被放入到空的survivor(也就是To Survivor,同時Eden區域的記憶體會在垃圾回收的過程中全部釋放),另一個survivor(即From Survivor)裡不能被回收的物件也會被放入這個survivor(即To Survivor),然後To Survivor 和 From Survivor的標記會互換,始終保證一個survivor是空的。

這裡寫圖片描述
Eden Space和Survivor Space都屬於新生代,新生代中執行的垃圾回收被稱之為Minor GC(因為是對新生代進行垃圾回收,所以又被稱為Young GC),每一次Young GC後留下來的物件age加1。

注:GC為Garbage Collection,垃圾回收。

Old Gen老年代,用於存放新生代中經過多次垃圾回收仍然存活的物件,也有可能是新生代分配不了記憶體的大物件會直接進入老年代。經過多次垃圾回收都沒有被回收的物件,這些物件的年代已經足夠old了,就會放入到老年代。

當老年代被放滿的之後,虛擬機器會進行垃圾回收,稱之為Major GC。由於Major GC除併發GC外均需對整個堆進行掃描和回收,因此又稱為Full GC。

heap區即堆記憶體,整個堆大小=年輕代大小 + 老年代大小。堆記憶體預設為實體記憶體的1/64(<1GB);預設空餘堆記憶體小於40%時,JVM就會增大堆直到-Xmx的最大限制,可以通過MinHeapFreeRatio引數進行調整;預設空餘堆記憶體大於70%時,JVM會減少堆直到-Xms的最小限制,可以通過MaxHeapFreeRatio引數進行調整。

下面我們來認識下非堆記憶體(非heap區)
Code Cache程式碼快取區,它主要用於存放JIT所編譯的程式碼。CodeCache程式碼緩衝區的大小在client模式下預設最大是32m,在server模式下預設是48m,這個值也是可以設定的,它所對應的JVM引數為ReservedCodeCacheSize 和 InitialCodeCacheSize,可以通過如下的方式來為Java程式設定。

-XX:ReservedCodeCacheSize=128m

CodeCache快取區是可能被充滿的,當CodeCache滿時,後臺會收到CodeCache is full的警告資訊,如下所示:
“CompilerThread0” java.lang.OutOfMemoryError: requested 2854248 bytes for Chunk::new. Out of swap space?

注:JIT編譯器是在程式執行期間,將Java位元組碼編譯成平臺相關的二進位制程式碼。正因為此編譯行為發生在程式執行期間,所以該編譯器被稱為Just-In-Time編譯器。

Perm Gen全稱是Permanent Generation space,是指記憶體的永久儲存區域,因而稱之為永久代。這個記憶體區域用於存放Class和Meta的資訊,Class在被 Load的時候被放入這個區域。因為Perm裡儲存的東西永遠不會被JVM垃圾回收的,所以如果你的應用程式LOAD很多CLASS的話,就很可能出現PermGen space錯誤。預設大小為實體記憶體的1/64。