第58节java虚拟机介绍程序启动参数设置优化_第1页
第58节java虚拟机介绍程序启动参数设置优化_第2页
第58节java虚拟机介绍程序启动参数设置优化_第3页
第58节java虚拟机介绍程序启动参数设置优化_第4页
第58节java虚拟机介绍程序启动参数设置优化_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java虚拟机介绍:java程序启动参数设置优一、GCJVMGC(GarbageCollection(generationalcollectionSUNVMJ2SE1.2generationtenuredyounggenerationobjectdieyounggeneration了之后,将minorcollection(YGC)。在minorcollection后存活的object会被移动到tenured满之后触发(Fullgc)会触发整个heapyounggeneration。permanetgeneration定,主要存放classloader信息。younggeneration有eden、2个survivor区域组成。其中一个survivor区域一直是空的,是eden区域和另一个survivor区域在下一次copycollection后活着的objecy的目的地。object在survivo区域被直到转移到tenured区。我们要尽量减少Fullgc的次数(tenuredgeneration一般比较大,收集的时间较长,频繁的Fullgc会导致应用的性能收到严重的影响)。堆内存GC:JVM(采用分代回收的策略),用较高的频率对年轻的对象(younggeneration)进行YGC,而对老对象(tenuredgeneration)较少(tenuredgeneration满了后才进行)进行FullGC。这样就不需要每次GC都将内存中所有对象都检查一遍。非堆内存不GC:GC不会在主程序运行期对PermGenSpace中有很多CLASSpermgenspace出现PermGenSpace错误。内存申请、对象衰老过JVM会试图为相关Java对象在Eden当Eden空间足够时,内存申请结束。否则到下一步;collection放入新对象,则试图将部分Eden中活跃对象放入Survivor区;Survivor区被用来作为Eden及oldOLDSurvivor会被移到Old区,否则会被保留在Survivor区;当oldJVM会在old区进行major完全收集后若Survivor及old区仍然无法存放从Eden过来的部分对象导致JVM无法在Eden区为新对象创建内存区域,则出现"Outofmemory错误";eden。Minorcollectioneden和在用survivorspacecopy到空闲survivorspaceyounggeneration数配置)的minorcollection后,就会被移到oldgeneration中,称为tenuring。GC类触发条触发时发生了什查看方eden空间清空Eden+fromsurvivor中所有noref的对象占用的内将eden+fromsur中所有存活的对象copy到tosur中一些对象将晋升到old中:tosur放不下存活次数超过turningthreshold中的重新计算tenuringthreshold(serialparallelGC重新调整Eden和from的大小(parallelGC会触发此全过程暂停应是否为多线程处GC决jstat–gc进ID间隔old空间不足perm空间不足RMI等的定时YGC时的悲观dumplive的内清空heap中noref的对象permgen中已经被卸载的classloader中加载的class信如配置了CollectGenOFirst,则先触发YGC(serial触发YGC(serialGC)全过程暂停应是否为多线程处GC决是否压缩jstat–gc进ID间隔permanentgeneration空间不足会FullGC,仍然不够会PermGenSpace错误二、JVM含默不管是YGC还是FullGC,GC过程中都会对导致程序运行断,正确的选择不同的含默-默认(MinHeapRatio参数可以调整)40%时,JVM就会增大堆直到-Xmx的最大限制.-会减少堆直到-Xms-注意:此处的大小是(eden+2survivorspace).jmapheap中显示的Newgen是不同的。整个堆大小=年轻代大小+年老代大小+持久代大小.此值对系统性能影响较大,Sun推荐配置为3/8-----JDK5.0以后每个线程堆栈大小为无限生成,3000~5000左一般小的用,如果,应该是128k够用的应用建议使用256。这个较严格的。(长)和hrsckse似乎没解释中有这样话-XssistranslatedinaVMnamed-ThreadStack(0meansusedefaultstacksize)[Sparc:512;Solarisx86:320(was256priorin5.0andearlier);Sparc64bit:Linuxamd64:1024(was05.0andearlier);allothers-年轻代(包括Eden和Survivor区)与-XX:NewRatio=4表示年轻代与年栈1/5-Eden区的比2:8,一个Survivor区占整个年轻1/10-过大,会影响Perm--关-如果设置0的话,则年轻代对象不Survivor区,直接进入年老代.Survivor区进行多存活时间,增加在年轻代即被回收的-加快---softlyreachableobjectswillremainaliveforsomeamountoftimeafterthelasttimetheywerereferenced.Thedefaultvalueisonesecondoflifetimepermegabyteinthe-0单位字节采用ParallelScavengeGC时无效---FullGCparallel-JDK5.0以上,JVM会根据系统配置-此值最好配置与处样适用于-JAVA6出现的参数--和相应Survivor区--FullGC前调DoyounggenerationGCpriortoafullGC.(IntroducedinCMS-用-Xmn设置.???-(大量的CPU/内存,(在1.4.14CPU的- 行效率降低.此值设置运行多少次GC以后对-GC的时候,对年CMS是不会移动内存的,因此,这个非常容易产生碎片,导致内存不够用,因此,内存的压缩这个时候就会被启用。增加这个-CMS收hostspot自行触发CMSGC-cms70%CMSpromotionfailed(见下面介CMSInitiatingOccupancyFraction计-比率时发---输出形式[GC118250K- [Full 输出形式:[GC[DefNew:8614K->781K(9088K0. [GC --可与-XX:+PrintGC-XX:+Printetails混合使用输出形式:11.851:[GC -输出形式:Totaltimeforwhichapplicationthreadswerestopped: -输出形式:Application --使-collectsbeforeprintingthe-TLAB空间查看每次minorGC后新的存活Desiredsurvivorbytes,newthreshold7(max15)newthreshold7即标识新的存活周期的7对于GC2throughput(gc时间比)和暂停pause(gc发生时app对外显示的无法响应。Total默认情况下,vm会增加/减少heap大小以维持 space在整个vm中占的比例,这个比例由MinHeap Ratio和MaxHeap Ratio指定。一般而言,server端的app对vm分配尽可能多的memory;将XmsXmx设为一样的值。如果虚拟机启动时设置使用的内存比较小,这个时候又需要初TheYoung另外一个对于app流畅性运行影响的因素是younggeneration的大小。younggeneration越大,minorcollection越少;但是在固定heapsizeyounggenerationtenuredgeneration,就意味着的majorcollection(majorcollection会minorcollection)。NewRatioyoung和tenuredgenerationNewSize和MaxNewSize是younggeneration大小的下限和上限,将这两个值设为一样就固定了younggeneration的大小(XmsXmx设为一样如果希望,SurvivorRatio也可以优化survivorSurvivorRatioeden和survior一般而言,server端的appvm的最大的heapsizeyounggeneration如果heapsizeyounggeneration的大小意味着减小tenuredgenerationtenuredgeneration在任何时候够大,能够容纳所有live的data(留10%-20%的空余。1、年轻代大小选响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择).在此种情况下,年轻代收集发生的频率也是最小的.同时,减少到达年老代的对象.吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度.因为对响应时间没有要求,收集可以并行进行,一般适合8CPU以上的应用.避免设置过小.当设置过小时会导致:1.YGC次数更加频繁2.可能导致YGC对象直接进入旧生代,如果此时旧生代满了,会触发FGC.2、年老代大小选响应时间优先的应用:年老代使用并发收集器,所以其大小需要设置,一般要考虑并发会话率和会话持续时间等一些参数.如果堆设置小了,可以会造成内存碎片,高回收频率以及应用并发收集信息、持久代并发收集次数、传统GC3、较小堆引起的碎片问因为年老代的并发收集器使用标记,清除算法,所以不会对堆进行压缩.当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象.但是,当堆空间较小时,运行一段时间以后,就会出现"碎片",如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的 paction=0FullGC4、用64位操作系统,Linux下64位的jdk比32位jdk要慢一些,但是吃得内存,吞5、XMX和XMS设置一样大,MaxPermSizeMinPermSize设置一样大,这样可以减轻伸6、使用CMS的好处是用尽量少的,经验值是128M-256M,然后老生代利用CMScms2G内存,大约20-80ms的应用程序停顿时间7、系统停顿的时候可能是GC的问题也可能是程序的问题,多用jmap和jstack查看,或者killall3javajavablog中介绍)8、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论