jvm的认知

jvm的认知

  1. jvm概括图
    在这里插入图片描述
  2. java堆
    在这里插入图片描述
  3. java栈
    在这里插入图片描述

一些参数学习记录


 - 栈的大小设定
	 1: [-Xss10m]   意思就是设置栈的最大大小
	 		我们在递归的时候,设置的栈越大,递归的深度就会越大
	 		
 - 	方法区(永久区)的设定
	方法区是一块所有线程共享的内存区域,用于保存系统的类信息,方法区可以保存多少信息,是可以进行配置的,配置如下.
 	1: [-XX:PermSize=64M]    初始化方法区的大小
 	2: [-XX:MaxPermSize=64M]    最大方法区的大小
 	
 - 	直接内存
 	直接内存主要应用于NIO,是跳过java堆直接操作原生堆,加快处理速度,但是也不一定是必能提高处理速度的;
 	1:[-XX:MaxDirectMemorySize] 设置最大直接内存空间,如果不设置,默认为最大堆内存空间,即[-Xmx]直接内存达到上限时,会触发GC,GC不能有效回收,也会触发OOM(内存泄露);
 - 	

其他参数的说明

CATALINA_OPTS="$CATALINA_OPTS -server -Djava.awt.headless=true 
-Xms2560m [JVM初始分配的堆内存 2.5G]
-Xmx2560m [JVM最大可用堆内存 2.5G]
-Xss256k [每个线程的堆栈大小]
-XX:PermSize=128m [永久代大小]
-XX:MaxPermSize=384m [永久代最大值]
-XX:NewSize=1024m [新生代初始内存大小]
-XX:MaxNewSize=1024m [新生代最大内存大小]
-XX:SurvivorRatio=22 [新生代中eden与survivor的容量比值,默认为8,线上竟然设置为这么大!!]
-XX:+UseParNewGC [使用ParNew+Serial Old的组合回收器]
-XX:ParallelGCThreads=4 [GC时进行内存回收的线程数]
-XX:MaxTenuringThreshold=9 [老年代阈值,熬过9次young GC就进入老年代]
-XX:+UseConcMarkSweepGC [使用ParNew+CMS+SerialOld进行组合回收,当CMS失败时,SerialOld作为后备回收器]
-XX:+DisableExplicitGC [忽略System.gc()方法触发的垃圾回收,即在程序中,是无法通过System.gc()进行垃圾回收的]
-XX:+ScavengeBeforeFullGC [开启在full GC之前触发一次minor GC]
-XX:+CMSParallelRemarkEnabled [并行的进行remark标记,降低GC停顿时间]
-XX:+UseCMSCompactAtFullCollection [开启在CMS回收老年代之后进行一次内存碎片整理]
-XX:CMSFullGCsBeforeCompaction=9 [在9次CMS老年代回收之后,进行一次内存碎片整理]
-XX:+UseCMSInitiatingOccupancyOnly [强迫JVM仅仅使用CMSInitiatingOccupancyFraction的值作为触发CMS的因素,否则JVM可能会使用其他指标启动CMS]
-XX:CMSInitiatingOccupancyFraction=60 [当老年代使用比率达到这个值时,就出发CMS]
-XX:SoftRefLRUPolicyMSPerMB=0 [如此设置,会在每次GC时,均将软引用回收掉,默认是在内存不够时,才试图去回收软引用]
-XX:-ReduceInitialCardMarks 
-XX:+CMSPermGenSweepingEnabled [启用CMS清理永久代]
-XX:+CMSClassUnloadingEnabled [启用CMS清理永久代的功能,CMS卸载无用的classes]
-XX:CMSInitiatingPermOccupancyFraction=70 [永久代使用比率达到多少时,会回收永久代]
-XX:+ExplicitGCInvokesConcurrent -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dj
ava.util.logging.config.file="%CATALINA_HOME%\conf\logging.properties" 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintHeapAtGC 
-Xloggc:/data/applogs/heap_trace.txt 
-XX:-HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/applogs/HeapDumpOnOutOfMemoryError 
-XX:-OmitStackTraceInFastThrow

-Xms 堆内存的最小大小,默认为物理内存的1/64
-Xmx 堆内存的最大大小,默认为物理内存的1/4
-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn
-Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。


堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:新生代大小
-XX:NewRatio:设置新生代和老年代的比值。如:为3,表示年轻代与老年代比值为1:3
-XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5  
-XX:MaxTenuringThreshold:设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代
-XX:PermSize、-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)
-XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)



收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行老年代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器


垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename


并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)


并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads=n:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值