任何人都可以在下面解释(它是如何工作的)
-XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -
XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -
XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+PrintGCDetails -
XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -
XX:+PrintPromotionFailure -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution
答案 0 :(得分:3)
这取决于你的“工作原理”是什么意思。让我们分解一下:
PermSize = 256m意味着您正在使用旧版本的JVM,它仍然具有单独的永久生成(用于保存JVM使用的对象,如Class对象)。通常情况下,这是64Mb,所以这个大小表明你正在加载很多类。这是初始尺寸。
MaxPermSize = 256m表示永久生成将设置为256Mb,并且在应用程序运行时不会调整大小。
UseConMarkSweepGC表示您正在使用并发标记扫描算法(CMS)。同样,这是旧版本,JDK 8中的任何内容通常都会使用G1收集器。这是为了降低延迟而设计的,而不是并行收集器(旧服务器类JVM的默认设置),这是针对吞吐量的。
CMSParallelRemarkEnabled。 CMS主要是并发但不完全。在初始的并发标记阶段之后,收集器将暂停所有应用程序线程并执行注释以赶上初始标记期间发生的更改。这个标志使它使用多个线程而不是一个。
CMSInitiatingOccupancyFraction = 70。当旧的gen达到70%时,CMS收集器开始工作。我们的想法是让收集器启动得足够晚,不要影响应用程序性能(通过频繁运行),但要尽早不要耗尽空间。
UseCMSInitiatingOccupancyOnly:仅使用旧的gen的百分比(占用率)来确定收集器何时启动(避免其他GC启发式)。
ScavengeBeforeFullGC:在完整GC之前进行年轻一代GC。
PrintGCDetails:打印GC活动的详细信息。更多细节不仅仅是PrintGC会产生的。
PrintGCDateStamps:显然打印GC活动发生时的时间戳
PrintGCApplicationStoppedTime:告诉你GC停止应用程序线程的时间
PrintPromotionFailure:打印出对象无法从年轻人升级到老年人的详细信息。这通常表明旧代过度分裂,需要完全压缩GC。
PrintHeapAtGC:这会在GC运行时打印出有关堆中的内容的大量详细信息。它确实需要一种工具才能有用。
PrintTenuringDistribution:打印有关对象如何老化(终身)的详细信息。在决定更改期限阈值时,这可能很有用,期限是在被保留到旧代之前,对象在幸存者空间之间被复制的次数。