周口网站建设费用,网站建设培训一般多少钱,网站建设教程搭建湖南岚鸿,最新新闻热点事件素材在JVM启动参数中#xff0c;可以设置跟内存、垃圾回收相关的一些参数设置#xff0c;默认情况不做任何设置JVM会工作的很好#xff0c;但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标#xff1a; GC的时间足够的小
GC的… 在JVM启动参数中可以设置跟内存、垃圾回收相关的一些参数设置默认情况不做任何设置JVM会工作的很好但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标 GC的时间足够的小
GC的次数足够的少
发生Full GC的周期足够的长 前两个目前是相悖的要想GC时间小必须要一个更小的堆要保证GC次数足够少必须保证一个更大的堆我们只能取其平衡。 1针对JVM堆的设置一般可以通过-Xms -Xmx限定其最小、最大值为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间我们通常把最大、最小设置为相同的值 2年轻代和年老代将根据默认的比例12分配堆内存可以通过调整二者之间的比率NewRadio来调整二者之间的大小也可以针对回收代比如年轻代通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样为了防止年轻代的堆收缩我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小 3年轻代和年老代设置多大才算合理这个我问题毫无疑问是没有答案的否则也就不会有调优。我们观察一下二者大小变化有哪些影响 更大的年轻代必然导致更小的年老代大的年轻代会延长普通GC的周期但会增加每次GC的时间小的年老代会导致更频繁的Full GC
更小的年轻代必然导致更大年老代小的年轻代会导致普通GC很频繁但每次的GC时间会更短大的年老代会减少Full GC的频率
如何选择应该依赖应用程序对象生命周期的分布情况如果应用存在大量的临时对象应该选择更大的年轻代如果存在相对较多的持久对象年老代应该适当增大。但很多应用都没有这样明显的特性在抉择时应该根据以下两点A本着Full GC尽量少的原则让年老代尽量缓存常用对象JVM的默认比例12也是这个道理 B通过观察应用一段时间看其他在峰值时年老代会占多少内存在不影响Full GC的前提下根据实际情况加大年轻代比如可以把比例控制在11。但应该给年老代至少预留1/3的增长空间 4在配置较好的机器上比如多核、大内存可以为年老代选择并行收集算法 -XX:UseParallelOldGC 默认为Serial收集 5线程堆栈的设置每个线程默认会开启1M的堆栈用于存放栈帧、调用参数、局部变量等对大多数应用而言这个默认值太了一般256K就足用。理论上在内存不变的情况下减少每个线程的堆栈可以产生更多的线程但这实际上还受限于操作系统。 4可以通过下面的参数打Heap Dump信息 -XX:HeapDumpPath
-XX:PrintGCDetails
-XX:PrintGCTimeStamps
-Xloggc:/usr/aaa/dump/heap_trace.txt 通过下面参数可以控制OutOfMemoryError时打印堆的信息 -XX:HeapDumpOnOutOfMemoryError 请看一下一个时间的Java参数配置服务器Linux 64Bit8Core×16G JAVA_OPTS$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize128m -XX:MaxPermSize128m -XX:UseParallelOldGC -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/usr/aaa/dump -XX:PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:/usr/aaa/dump/heap_trace.txt -XX:NewSize1G -XX:MaxNewSize1G