posts - 9, comments - 4, trackbacks - 0, articles - 21
          Sun HotSpot 1.4.1 JVM堆大小的調整
              
              Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個主要的域:新域、舊域以及永久域。Jvm生成的所有新對象放在新域中。一旦對象經歷了一定數量的垃圾收集循環 后,便獲得使用期并進入舊域。在永久域中jvm則存儲class和method對象。就配置而言,永久域是一個獨立域并且不認為是堆的一部分。

              下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個堆的原始大小或最大值。
              下面的命令是把初始大小設置為128M:
              java –Xms128m
               –Xmx256m為控制新域的大小,可使用-XX:NewRatio設置新域在堆中所占的比例。

             下面的命令把整個堆設置成128m,新域比率設置成3,即新域與舊域比例為1:3,新域為堆的1/4或32M:
             java –Xms128m –Xmx128m
              –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設置新域的初始值和最大值。

             下面的命令把新域的初始值和最大值設置成64m:
               java –Xms256m –Xmx256m –Xmn64m
             永久域默認大小為4m。運行程序時,jvm會調整永久域的大小以滿足需要。每次調整時,jvm會對堆進行一次完全的垃圾收集。

             使用-XX:MaxPerSize標志來增加永久域搭大小。在WebLogic Server應用程序加載較多類時,經常需要增加永久域的最大值。當jvm加載類時,永久域中的對象急劇增加,從而使jvm不斷調整永久域大小。為了避免 調整,可使用-XX:PerSize標志設置初始值。
             下面把永久域初始值設置成32m,最大值設置成64m。
              java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m

               默認狀態下,HotSpot在新域中使用復制收集器。該域一般分為三個部分。第一部分為Eden,用于生成新的對象。另兩部分稱為救助空間,當Eden充 滿時,收集器停止應用程序,把所有可到達對象復制到當前的from救助空間,一旦當前的from救助空間充滿,收集器則把可到達對象復制到當前的to救助 空間。From和to救助空間互換角色。維持活動的對象將在救助空間不斷復制,直到它們獲得使用期并轉入舊域。使用-XX:SurvivorRatio可 控制新域子空間的大小。

              同NewRation一樣,SurvivorRation規定某救助域與Eden空間的比值。比如,以下命令把新域設置成64m,Eden占32m,每個救助域各占16m:
              java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2

               如前所述,默認狀態下HotSpot對新域使用復制收集器,對舊域使用標記-清除-壓縮收集器。在新域中使用復制收集器有很多意義,因為應用程序生成的大 部分對象是短壽命的。理想狀態下,所有過渡對象在移出Eden空間時將被收集。如果能夠這樣的話,并且移出Eden空間的對象是長壽命的,那么理論上可以 立即把它們移進舊域,避免在救助空間反復復制。但是,應用程序不能適合這種理想狀態,因為它們有一小部分中長壽命的對象。最好是保持這些中長壽命的對象并 放在新域中,因為復制小部分的對象總比壓縮舊域廉價。為控制新域中對象的復制,可用-XX:TargetSurvivorRatio控制救助空間的比例 (該值是設置救助空間的使用比例。如救助空間位1M,該值50表示可用500K)。該值是一個百分比,默認值是50。當較大的堆棧使用較低的 sruvivorratio時,應增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。

             為放置所有的復制全部發生以及希望對象從eden擴展到舊域,可以把MaxTenuring Threshold設置成0。設置完成后,實際上就不再使用救助空間了,因此應把SurvivorRatio設成最大值以最大化Eden空間,設置如下:
             java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 …
          主站蜘蛛池模板: 洮南市| 呼伦贝尔市| 衡南县| 柏乡县| 田东县| 长沙县| 武邑县| 姜堰市| 红河县| 那曲县| 张家口市| 龙岩市| 新晃| 崇明县| 绥棱县| 洛阳市| 海丰县| 会同县| 潞西市| 清丰县| 九江市| 尤溪县| 台州市| 观塘区| 昭通市| 常山县| 石柱| 靖边县| 亳州市| 东乡| 海阳市| 石嘴山市| 宜昌市| 民丰县| 抚州市| 汉中市| 盐城市| 怀化市| 剑河县| 清水县| 西乌珠穆沁旗|