<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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

    二、java.lang.OutOfMemoryError: Java heap space
    Heap size 設置
    JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.JVM在啟動的時候會自動設置Heap size的值,
    其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可
    進行設置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
    提示:在JVM中如果98%的時間是用于GC且可用的Heap size 不足2%的時候將拋出此異常信息。
    提示:Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。
    解決方法:手動設置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 星光 閱讀(221) | 評論 (0)編輯 收藏

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

    set _EXECJAVA=start "Tomcat" %_RUNJAVA%

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

    如:

    set _EXECJAVA=start "MyWeb" %_RUNJAVA%

    這樣在啟動Tomcat的時候窗口名字即是MyWeb。這樣在一個機器上啟動多個Tomcat的時候可以區分出來。

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

    以下是例子:
    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;
        }
    }
    此時的運行結果是什么?機器給出的結果是“cba”,為什么會這樣,我理解如下:
    rt.setName("cba");
    此時rt是t1的一個復制,但是又不代表t1,但是rt和t1都指向同一個對象,無論通過rt還是t1來都會改變所引用對象的值。
    rt = staticTest;
    這時會把staticTest的引用賦給rt,但是rt只是t1的一個引用, rt此時指向staticTest,但是不會更改t1的值。
    所以會發生以上的結果。不知道正確與否?



    posted @ 2008-09-05 14:48 星光 閱讀(247) | 評論 (2)編輯 收藏
    主站蜘蛛池模板: 在线a毛片免费视频观看| 亚洲阿v天堂在线| 中文毛片无遮挡高清免费| 亚洲国产精品lv| 看全色黄大色大片免费久久| jizz18免费视频| 2017亚洲男人天堂一| 国产成人高清亚洲| 日韩版码免费福利视频| 免费VA在线观看无码| 亚洲丝袜美腿视频| 免费一级国产生活片| 在线免费观看亚洲| 菠萝菠萝蜜在线免费视频| 久久亚洲精品无码aⅴ大香| 又粗又大又长又爽免费视频| 99爱免费观看视频在线| 无套内谢孕妇毛片免费看看| 亚洲婷婷在线视频| 亚洲日本va中文字幕久久| 在线a人片天堂免费观看高清| 免费日本一区二区| 自拍偷自拍亚洲精品播放| 亚洲综合国产精品| 亚洲男人的天堂在线va拉文| 99re热免费精品视频观看| a级男女仿爱免费视频| 青青青亚洲精品国产| 亚洲精品亚洲人成在线麻豆| 国产gv天堂亚洲国产gv刚刚碰| 四色在线精品免费观看| 3344免费播放观看视频| 两个人看的www高清免费视频| 久久精品国产亚洲av品善| 亚洲伊人久久大香线蕉在观 | 亚洲国色天香视频| 亚洲AV无码乱码国产麻豆穿越| 亚洲人成影院在线无码观看| 日韩激情淫片免费看| 99热在线精品免费全部my| 亚洲黄色免费网站|