隨筆-4  評(píng)論-2  文章-0  trackbacks-0
            2008年9月5日
          一、java.lang.OutOfMemoryError: PermGen space

          PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,
          這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,
          它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)
          PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,
          這種錯(cuò)誤常見在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小
          超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。
          解決方法: 手動(dòng)設(shè)置MaxPermSize大小

          修改TOMCAT_HOME/bin/catalina.sh
          在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
          JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
          建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。

          二、java.lang.OutOfMemoryError: Java heap space
          Heap size 設(shè)置
          JVM堆的設(shè)置是指java程序運(yùn)行過(guò)程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,
          其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可
          進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
          提示:在JVM中如果98%的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?br /> 提示:Heap Size 最大不要超過(guò)可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。
          解決方法:手動(dòng)設(shè)置Heap size
          修改TOMCAT_HOME/bin/catalina.sh
          在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
          JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

          posted @ 2009-03-02 14:19 星光 閱讀(227) | 評(píng)論 (0)編輯 收藏

          對(duì)于windows,找到tomcat的bin目錄下面的catalina.bat,查找以下相似:

          set _EXECJAVA=start "Tomcat" %_RUNJAVA%

          把其中的Tomcat改成你想要的名字即可。

          如:

          set _EXECJAVA=start "MyWeb" %_RUNJAVA%

          這樣在啟動(dòng)Tomcat的時(shí)候窗口名字即是MyWeb。這樣在一個(gè)機(jī)器上啟動(dòng)多個(gè)Tomcat的時(shí)候可以區(qū)分出來(lái)。

          posted @ 2008-09-12 10:42 星光 閱讀(366) | 評(píng)論 (0)編輯 收藏
          最近在做項(xiàng)目時(shí)碰到關(guān)于java值傳遞和引用傳遞的問(wèn)題,查不了少文章,做了幾個(gè)例子才搞明白,當(dāng)然我總結(jié)出來(lái)的不一定是對(duì)的,歡迎大家來(lái)拍磚。主要有以下兩條:
          1.如果是基本類型,那么傳遞進(jìn)去的就是值傳遞。
          2.如果不是基本類型,那么傳遞進(jìn)去的就是對(duì)象引用的拷貝。

          以下是例子:
          public class Test {

              private String name;

              public String getName() {
                  return name;
              }

              public void setName(String name) {
                  this.name = name;
              }
          }

          public class Test1 {    
              private static Test staticTest;
              
              public static void main(String[] args) {
                  Test t1 = new Test();
                  call(t1);
                  System.out.println(t1.getName());
              }
              
              public static void call(Test rt) {
                  staticTest = new Test();
                  staticTest.setName("abc");
                  rt.setName("cba");
                  rt = staticTest;
              }
          }
          此時(shí)的運(yùn)行結(jié)果是什么?機(jī)器給出的結(jié)果是“cba”,為什么會(huì)這樣,我理解如下:
          rt.setName("cba");
          此時(shí)rt是t1的一個(gè)復(fù)制,但是又不代表t1,但是rt和t1都指向同一個(gè)對(duì)象,無(wú)論通過(guò)rt還是t1來(lái)都會(huì)改變所引用對(duì)象的值。
          rt = staticTest;
          這時(shí)會(huì)把staticTest的引用賦給rt,但是rt只是t1的一個(gè)引用, rt此時(shí)指向staticTest,但是不會(huì)更改t1的值。
          所以會(huì)發(fā)生以上的結(jié)果。不知道正確與否?



          posted @ 2008-09-05 14:48 星光 閱讀(253) | 評(píng)論 (2)編輯 收藏
          主站蜘蛛池模板: 辽宁省| 马山县| 遂昌县| 沐川县| 苍溪县| 衡南县| 浙江省| 乌苏市| 宁陵县| 乌海市| 福清市| 金阳县| 恩平市| 宜兰县| 丹寨县| 田林县| 永平县| 彩票| 南江县| 那坡县| 镇江市| 鸡东县| 昭苏县| 宜州市| 巴林左旗| 襄垣县| 惠东县| 苏尼特左旗| 育儿| 双柏县| 静安区| 武宣县| 敦煌市| 大庆市| 郸城县| 扬州市| 九江市| 阳信县| 扶风县| 民乐县| 马边|