首页 > 修改教程 > 游戏检测gg修改器_游戏检测gg修改器手机版
游戏检测gg修改器_游戏检测gg修改器手机版
  • gg修改器最新版
  • 大小:5.92MB版本:v4.32
  • 语言:简体中文系统:Android
绿色无毒,安全可靠!部分设备误报拦截请通过!

游戏检测gg修改器_游戏检测gg修改器手机版

作者:佚名 来源:网友分享 日期:2024-03-29 15:03:51

大家好,今天小编为大家分享关于游戏检测gg修改器_游戏检测gg修改器手机版的内容,赶快来一起来看看吧。

G1 GC是一种自适应垃圾收集算法,自Java 9以来已成为默认的GC算法。今天主要通过分享一些简单的技巧来调整G1垃圾收集器以获得最佳运行性能。

1、最大GC暂停时间

可以考虑将“ -XX:MaxGCPauseMillis”参数与我们首选的暂停时间目标一起传递。此参数设置最大暂停时间的目标值。G1 GC算法会尽力达到这一目标。

2、避免设定年轻代

避免将年轻代的大小设置为特定大小(通过传递’-Xmn,-XX:NewRatio’参数)。G1 GC算法在运行时修改了年轻代的大小,以达到其暂停时间目标。如果显式地定义了年轻代的大小,则将无法达到暂停时间目标。

3、移除旧的参数

从其他GC算法(CMS,Parallel等)转移到G1 GC算法时,需要关注参数的适配性,有的参数搭配是不兼容的,故在实际的项目中,我们在进行Java虚拟机参数设置时,需检测及移除所有与旧GC算法有关的JVM参数。通常,如果在我们的最新应用框架里面配置较旧的GC算法参数并将其传递给G1策略算法时不会产生任何效果,甚至有的时候可能以否定的方式做出响应。

4、消除字符串重复

由于编程效率低下,现代应用程序浪费了很多内存。这是一个案例研究,显示了Spring Boot框架浪费的内存。内存浪费的主要原因之一是字符串的重复。最近的一项研究表明,应用程序内存的13.5%包含重复的字符串。当我们传递“ -XX:+ UseStringDeduplication”参数时,G1 GC提供了消除重复字符串的选项。如果在Java 8 update 20及更高版本上运行,则可以考虑将此参数传递给应用程序。它有可能提高整体应用程序的性能。

5、熟悉默认配置

为了进行适配调整,在下表中,我们总结了重要的G1 GC算法参数及其默认值:

G1 GC参数

参数描述

-XX:MaxGCPauseMillis = 200

设置最大暂停时间值。默认值为200毫秒

-XX:G1HeapRegionSize = n

设置G1区域的大小。该值必须是2的幂,即256、512、1024等。范围从1MB到32MB

-XX:GCTimeRatio = 12

设置应花费在GC上的总目标时间与花费在处理客户交易上的总时间。确定目标GC时间的实际公式为[1 /(1 + GCTimeRatio)]。默认值12表示目标GC时间为[1 /(1 + 12)],即7.69%。这意味着JVM可以将其时间的7.69%花费在GC活动上,而剩余的92.3%应该花费在处理客户活动上

-XX:ParallelGCThreads = n

设置Stop-the-world停止工作线程数。

如果少于或等于8个逻辑处理器,则将n的值设置为逻辑处理器的数量;如果逻辑处理器多于八个,则将n的值设置为逻辑处理器的大约5/8。除较大的SPARC系统外,这在大多数情况下均有效,其中n的值大约为逻辑处理器的5/16

-XX:ConcGCThreads = n

设置并行标记线程的数量。将n设置为并行垃圾回收线程(ParallelGCThreads)数量的大约1/4

-XX:InitiatingHeapOccupancyPercent = 45

当堆的使用量超出此百分比时,将触发GC标记周期。默认值为45%

-XX:G1NewSizePercent = 5

设置要用作年轻代大小的最小值的堆百分比。默认值为Java堆的5%

-XX:G1MaxNewSizePercent = 60

设置堆大小的百分比,以用作年轻代大小的最大值。默认值为Java堆的60%

-XX:G1OldCSetRegionThresholdPercent = 10

设置在混合垃圾收集周期中要收集的旧区域数的上限。缺省值为Java堆的10%

以及-XX:G1ReservePercent = 10设置要保留的保留内存百分比。默认值为10%。G1垃圾收集器将尝试使堆的10%始终保持空闲状态。

6、探究GC Cause

优化G1 GC性能的有效方法之一是研究触发GC的原因并结合实际的业务场景提供解决方案以减少它们的发生。可通过以下方式或策略深入挖掘引起我们应该程序进行GC的相关深层次原因:

(1)在应用程序中启用GC日志。可以通过将以下JVM参数传递给我们的应用程序启动脚本中,在服务启动过程中来启用它进行日志的跟踪。

Java 8以及之前的版本:

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{文件路径}

从Java 9及更高版本开始:

-Xlog:gc *:file = {文件路径}
{file-path}:将写入GC日志文件的位置

(2)可以借助免费的工具(例如GCeasy,Garbage Cat,HP Jmeter)分析GC日志文件。这些工具能够结合应用服务运行状态以及当前的环境详细展示出触发GC活动的原因。以下是G1 GC日志文件时借助其他工具生成的GC原因表。

6.1、Full GC – Allocation Failure

Full GC –发生分配失败有两个原因:

(1)应用程序创建了太多无法快速回收的对象。

(2)当堆碎片化时,即使有很多可用空间,旧代中的直接分配也可能会失败。

以下是解决此问题的潜在解决方案:

1、通过设置“ -XX: ConcGCThreads”值,增加并发标记线程的数量。增加并发标记线程将使垃圾回收运行更快。

2、强制G1更早开始标记阶段。可以通过降低“ -XX: InitiatingHeapOccupancyPercent”值来实现。默认值为45。这意味着G1 GC标记阶段仅在堆使用率达到45%时才开始。通过降低该值,G1 GC标记阶段将更早触发,从而可以避免Full GC。

3、即使堆中有足够的空间,由于缺少连续的空间集,也会发生Full GC。之所以会发生这种情况,是因为内存中存在许多庞大的对象(请参阅本文中的“ 6.3。G1 庞大的分配”一节)。解决此问题的潜在解决方案是通过使用选项“ -XX: G1HeapRegionSize”来增加堆区域大小,以减少庞大对象浪费的内存量。

6.2、G1 疏散暂停或疏散失败

当我们看到G1撤离暂停时,则G1 GC没有足够的内存来存储幸存者或被提升的物体,或两者都没有。Java堆无法扩展,因为它已经达到了最大值。以下是解决此问题的潜在解决方案:

1、增加“ -XX: G1ReservePercent”参数的值。默认值为10%。这意味着G1垃圾收集器将尝试始终保持10%的可用内存。当我们尝试增加此值时,GC将更早触发,以防止撤离暂停。

2、通过减少“ -XX: InitiatingHeapOccupancyPercent”,开始更早的标记周期。默认值为45。减小该值将更早开始标记循环。当堆的使用率超过45%时,将触发GC标记周期。另一方面,如果标记周期开始得较早而不是回收,则将“ -XX: InitiatingHeapOccupancyPercent”阈值提高到默认值以上。

3、我们还可以增加’-XX: ConcGCThreads’参数的值以增加并行标记线程的数量。增加并发标记线程将使垃圾回收运行更快。

4、如果问题仍然存在,则可以考虑增加JVM堆大小(即“-Xmx”参数)

6.3、 G1大量分配

任何大于区域大小一半的对象都被视为“巨大对象”。如果区域包含巨大物体,则该区域中最后一个巨大物体与区域末端之间的空间将不被使用。如果有多个此类庞大的对象,则此未使用的空间可能导致堆碎片化。堆碎片会损害应用程序的性能。如果我们看到多个Humongous分配,请增加“ -XX: G1HeapRegionSize”。该值为2的幂,范围为1MB至32MB。

6.4、System.gc()

当从我们的应用程序调用“ System.gc()”或“ Runtime.getRuntime().gc()” API调用时,将触发Stop-The-World的Full GC事件。可以通过以下解决方案解决此问题:

1、搜索和替换

这可能是一种传统方法,但是可以。在应用程序代码库中搜索“ System.gc()”和“ Runtime.getRuntime().gc()”。如果看到匹配项,则将其删除。如果从我们的应用程序源代码中调用“ System.gc()”,则此解决方案将起作用。如果要从我们的第三方库,框架或通过外部源调用“ System.gc()”,则此解决方案将不起作用。在这种情况下,我们可以考虑使用#2和#3中概述的选项。

2、 -XX: + DisableExplicitGC

启动应用程序时,可以通过传递JVM参数–XX: + DisableExplicitGC来强制禁用System.gc()调用。此选项将使从我们的应用程序堆栈调用的所有“ System.gc()”调用关闭。在实际的业务场景中,许多应用程序仍然对System.gc()进行过多的显式调用以请求垃圾回收。在许多情况下,这些调用会由于过早的垃圾收集和压缩而降低性能。但是,在某种场景下,我们不能总是从应用程序中禁止其调用。此参数允许JVM忽略这些垃圾收集建议。通常,除非特定的场景,可能使用此参数的引入能够使得我们的应用程序达到较理想的效果。然而,默认情况下,对System.gc()的调用会触发垃圾回收。

3、 -XX: +ExplicitGCInvokesConcurrent

我们可以传递“ -XX: + ExplicitGCInvokesConcurrent” JVM参数。传递此参数后,GC集合将与应用程序线程同时运行,以减少冗长的暂停时间。

4、 RMI

如果我们的应用程序使用RMI,则可以控制“ System.gc() ”调用的频率。在应用程序启动时,可以定义以下JVM参数配置该频率:

-Dsun.rmi.dgc.server.gcInterval = n
-Dsun.rmi.dgc.client.gcInterval = n

这些属性的默认值在:

JDK 1.4.2及5.0是60000毫秒(即60秒)

JDK 6及更高版本为3600000毫秒(即60分钟)

大家可能需要将这些属性设置为非常高的值,以便可以将影响降低至最小化。

6.5、堆转储启动的GC

“堆转储启动的GC”表示使用诸如Jcmd,Jmap,Profiler等工具从应用程序捕获了堆转储。在捕获堆转储之前,这些工具通常会触发全局的GC,此项操作将导致应用程序长时间的暂停。除非必要时,否则建议大家在程序运行的过程中能够自动触发以捕获堆转储文件。

基于以上的解析过程,希望本文对大家有所帮助,使得我们优化后的应用程序在运行过程中以获得最佳性能表现。

– EOF –

如果您喜欢本文,欢迎点赞、收藏、留言,或者点击右下角,把文章分享给你的朋友们~~~

Luga Lee

“路,在自己脚下~”

以上就是关于游戏检测gg修改器_游戏检测gg修改器手机版的全部内容,希望对大家有帮助。

相关文章

热门下载

大家还在搜