当前位置: 首页 > news >正文

JVM Optimization Learning(五)

目录

一、JVM Optimization

1、G1

1、G1内存模型

2、基础概念

3、G1特点:

4、CMS日志分析

5、G1日志分析

2、GC参数

2.1、GC常用参数

2.2、Parallel常用参数

2.3、CMS常用参数

2.4、G1常用参数


一、JVM Optimization

1、G1

G1官网说明:Garbage First Garbage Collector Tuning

The Garbage First Garbage Collector (G1 GC) is the low-pause, server-style generational 
garbage collector for Java HotSpot VM. The G1 GC uses concurrent and parallel phases 
to achieve its target pause time and to maintain good throughput. When G1 GC determines 
that a garbage collection is necessary, it collects the regions with the least live data 
first (garbage first).
G1是Java HotSpot VM的低暂停、服务器端应用的垃圾收集器。G1 GC使用并行和并行阶段来实现其目标暂停
时间并保持良好的吞吐量。当G1GC确定有必要进行垃圾收集时,它首先收集具有最少活动数据的区域
(垃圾优先)。G1是一种服务端应用使用的垃圾收集器,目标是用在多核、大内存的机器上,它在大多数情况下可以实现指定
的GC暂停时间,同时还能保持较高的吞吐量。

分而治之+分层模型

1、G1内存模型

humongous:/hjuːˈmʌŋɡəs/ 巨大的、庞大的

humongous object:超过单个region的50%

it collects the regions with the least live data first (garbage first).垃圾优先

        每个分区都可能是年轻代也可能是老年代,但是在同一时刻只能属于某个代。
        年轻代、幸存区、老年代这些概念还存在,成为逻辑上的概念,这样方便复用之前分代框架的逻辑。在物理上不需要连续,则带来了额外的好处——有的分区内垃圾对象特别多,有的分区内垃圾对象很少,G1会优先回收垃圾对象特别多的分区,这样可以花费较少的时间来回收这些分区的垃圾,这也就是G1名字的由来,即首先收集垃圾最多的分区。
        新生代其实并不是适用于这种算法的,依然是在新生代满了的时候,对整个新生代进行回收——整个新生代中的对象,要么被回收、要么晋升,至于新生代也采取分区机制的原因,则是因为这样跟老年代的策略统一,方便调整代的大小。
        G1还是一种带压缩的收集器,在回收老年代的分区时,是将存活的对象从一个分区拷贝到另一个可用分区,这个拷贝的过程就实现了局部的压缩。每个分区的大小从1M到32M不等,但是都是2的幂次方。

2、基础概念

1、Card Table

由于做YGC时,需要扫描整个OLD区(因为OLD区有可能有引用指向Y区),效率非常低,所以JVM设计了CardTable, 如果一个OLD区CardTable中有对象指向Y区,就将它设为Dirty,下次扫描时,只需要扫描Dirty Card

在结构上,Card Table用BitMap来实现。(Dirty:肮脏的,脏数据)

2、CSet = Collection Set
一组可被回收的分区的集合。
在CSet中存活的数据会在GC过程中被移动到另一个可用分区,CSet中的分区可以来自Eden空间、survivor空间、或者老年代。
CSet会占用不到整个堆空间的1%大小。

3、RSet = RememberedSet    (Remembered:记得)

在Region中有一块区域,记录了其他Region中的对象到本Region的引用
RSet的价值在于使得垃圾收集器不需要扫描整个堆找到谁引用了当前分区中的对象,只需要扫描RSet即可。

4、RSet与赋值的效率

由于RSet 的存在,那么每次给对象赋引用的时候,就得做一些额外的操作,指的是在RSet中做一些额外的记录(在GC中被称为写屏障),这个写屏障 不等于 内存屏障

5、GC何时触发

YGC:Eden空间不足、多线程并行执行

FGC:Old空间不足、System.gc()

6、G1是否分代?G1垃圾回收器会产生FGC吗?

G1是逻辑分代,物理不分代。会产生FGC,最后的对象分配不开了

7、如果G1产生FGC,你应该做什么?

    1.扩内存

    2. 提高CPU性能

    3. 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)

8、G1中的MixedGC

    1.=CMS

    2.XX:InitiatingHeapOccupacyPercent  默认值45%,当O超过这个值时,启动MixedGC

9、MixedGC的过程

    1.初始标记 STW

    2.并发标记

SATB算法:
Snapshot At The Beginning
GC开始时,通过root tracing得到一个Snapshot
维持并发GC的正确性
如何做到并发GC的正确性:
三色标记算法:
白:对象没有标记,标记阶段结束后,会被回收
灰:对象标记了,但是他的Field还没有标记或标记完
黑:对象标记了,且他的Field也标记完成

漏标

    在remark过程中,黑色指向了白色,如果不对黑色重新扫描,则会漏标。会把白色D对象当做没有新引用指向从而回收掉。

    并发标记过程中,删除了所有从灰色到白色的引用,会产生漏标,此时白色对象应该被回收。

漏标是指,本来是live object,但是由于没有遍历到,被当成garbage回收掉了

产生漏标:

    ①. 标记进行时增加了一个黑到白的引用,如果不重新对黑色进行处理,则会漏标
    ②. 标记进行时删除了灰对象到白对象的引用,那么这个白对象有可能被漏标

打破上述两个条件之一即可,解决漏标问题

    ①. incremental update -- 增量更新,关注引用的增加,把黑色重新标记为灰色,下次重新扫描属性,CMS使用。

    ②. SATB snapshot at the beginning – 关注引用的删除,当B->D消失时,要把这个引用推到GC的堆栈,保证D还能被GC扫描到,G1使用。

    3.最终标记 STW (重新标记)

    4.筛选回收 STW (并行)

10、为什么G1用SATB?

灰色 → 白色 引用消失时,如果没有黑色指向白色,引用会被push到堆栈。
下次扫描时拿到这个引用,由于有RSet的存在,不需要扫描整个堆去查找指向白色的引用,效率比较高。SATB 配合 RSet ,浑然天成

11、G1的Full GC

java 10以前是串行FullGC,之后是并行FullGC

12、G1新老年代比例

5%-60%,一般不用手工指定,也不要手工指定,因为这是G1预测停顿时间的基准

13、每个Region有多大 

取值1 2 4 8 16 32   即2的幂次方

手工指定 -XX:G1HeapRegionSize

3、G1特点:

  1. 并发收集
  2. 压缩空闲空间不会延长GC的暂停时间
  3. 更易预测的GC暂停时间
  4. 适用不需要实现很高的吞吐量的场景

4、CMS日志分析

JVM Optimization Learning(四)

中的JVM Optimization Case环境继续使用此环境

[root@localhost java]# java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.lwz.jvm.T15_FullGC_Problem01
[GC (Allocation Failure) [ParNew: 5504K->640K(6144K), 0.0124495 secs] 5504K->1049K(19840K), 0.0126009 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]
[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0273421 secs] 6553K->2858K(19840K), 0.0274255 secs] [Times: user=0.08 sys=0.00, real=0.02 secs]
[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0169154 secs] 8362K->6127K(19840K), 0.0171555 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0139854 secs] 11631K->9628K(19840K), 0.0140778 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8988K(13696K)] 9628K(19840K), 0.0014297 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.030/0.030 secs] [Times: user=0.04 sys=0.00, real=0.03 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Final Remark) [YG occupancy: 1274 K (6144 K)][Rescan (parallel) , 0.0012268 secs][weak refs processing, 0.0000665 secs][class unloading, 0.0014624 secs][scrub symbol table, 0.0007199 secs][scrub string table, 0.0003808 secs][1 CMS-remark: 8988K(13696K)] 10262K(19840K), 0.0041094 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.015/0.015 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8926K(13696K)] 10982K(19840K), 0.0012949 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.018/0.018 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Final Remark) [YG occupancy: 2056 K (6144 K)][Rescan (parallel) , 0.0006445 secs][weak refs processing, 0.0000152 secs][class unloading, 0.0008104 secs][scrub symbol table, 0.0005612 secs][scrub string table, 0.0002756 secs][1 CMS-remark: 8926K(13696K)] 10982K(19840K), 0.0024193 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.005/0.005 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8926K(13696K)] 11454K(19840K), 0.0018331 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.031/0.031 secs] [Times: user=0.04 sys=0.00, real=0.03 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.004/0.004 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (CMS Final Remark) [YG occupancy: 2528 K (6144 K)][Rescan (parallel) , 0.0086513 secs][weak refs processing, 0.0000225 secs][class unloading, 0.0009794 secs][scrub symbol table, 0.0005974 secs][scrub string table, 0.0002462 secs][1 CMS-remark: 8926K(13696K)] 11454K(19840K), 0.0106071 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8926K(13696K)] 11791K(19840K), 0.0017124 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.028/0.028 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-abortable-preclean-start]CMS: abort preclean due to time [CMS-concurrent-abortable-preclean: 1.068/5.088 secs] [Times: user=1.51 sys=0.00, real=5.08 secs]
[GC (CMS Final Remark) [YG occupancy: 4373 K (6144 K)][Rescan (parallel) , 0.0016615 secs][weak refs processing, 0.0000167 secs][class unloading, 0.0007608 secs][scrub symbol table, 0.0005483 secs][scrub string table, 0.0002508 secs][1 CMS-remark: 8926K(13696K)] 13299K(19840K), 0.0033322 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.007/0.007 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.012/0.012 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8926K(13696K)] 13771K(19840K), 0.0030760 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.027/0.027 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-abortable-preclean-start]
[CMS-concurrent-abortable-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Final Remark) [YG occupancy: 4845 K (6144 K)][Rescan (parallel) , 0.0024014 secs][weak refs processing, 0.0000203 secs][class unloading, 0.0010572 secs][scrub symbol table, 0.0007175 secs][scrub string table, 0.0003684 secs][1 CMS-remark: 8926K(13696K)] 13771K(19840K), 0.0046857 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.007/0.007 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 8926K(13696K)] 14998K(19840K), 0.0048182 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.021/0.021 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.004/0.004 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[CMS-concurrent-abortable-preclean-start]
[CMS-concurrent-abortable-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (CMS Final Remark) [YG occupancy: 6072 K (6144 K)][Rescan (parallel) , 0.0032505 secs][weak refs processing, 0.0000216 secs][class unloading, 0.0010294 secs][scrub symbol table, 0.0006718 secs][scrub string table, 0.0003728 secs][1 CMS-remark: 8926K(13696K)] 14998K(19840K), 0.0055128 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.011/0.011 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0149299 secs] 14864K->12924K(19840K), 0.0150074 secs] [Times: user=0.06 sys=0.00, real=0.02 secs]
[GC (CMS Initial Mark) [1 CMS-initial-mark: 12284K(13696K)] 13014K(19840K), 0.0008257 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.026/0.026 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (CMS Final Remark) [YG occupancy: 1336 K (6144 K)][Rescan (parallel) , 0.0007401 secs][weak refs processing, 0.0000219 secs][class unloading, 0.0010162 secs][scrub symbol table, 0.0006404 secs][scrub string table, 0.0004188 secs][1 CMS-remark: 12284K(13696K)] 13621K(19840K), 0.0029844 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[CMS-concurrent-sweep-start]

ParNew年轻代:

[GC (Allocation Failure) [ParNew: 5504K->640K(6144K), 0.0124495 secs] 5504K->1049K(19840K), 0.0126009 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]
ParNew:年轻代收集器
5504K->640K:收集前后的对比
(6144K):整个年轻代容量
5504K->1049K:整个堆的情况
(19840K):整个堆大小

CMS老年代回收日志---主要看1.频繁不频繁,2.花的时间长不长,是不是在我允许的范围之内

[GC (CMS Initial Mark) [1 CMS-initial-mark: 8988K(13696K)] 9628K(19840K), 0.0014297 secs][Times: user=0.00 sys=0.00, real=0.00 secs]//8988K(13696K) : 老年代使用(最大)//9628K(19840K) : 整个堆使用(最大)
[CMS-concurrent-mark-start]
[CMS-concurrent-mark: 0.030/0.030 secs] [Times: user=0.04 sys=0.00, real=0.03 secs]//这里的时间意义不大,因为是并发执行
[CMS-concurrent-preclean-start]
[CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]//标记Card为Dirty,也称为Card Marking
[GC (CMS Final Remark) [YG occupancy: 1274 K (6144 K)][Rescan (parallel) , 0.0012268 secs]
[weak refs processing, 0.0000665 secs][class unloading, 0.0014624 secs][scrub symbol table,0.0007199 secs][scrub string table, 0.0003808 secs][1 CMS-remark: 8988K(13696K)]10262K(19840K), 0.0041094 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]//STW阶段,YG occupancy:年轻代占用及容量//[Rescan (parallel):STW下的存活对象标记//weak refs processing: 弱引用处理//class unloading: 卸载用不到的class//scrub symbol(string) table: //cleaning up symbol and string tables which hold class-level metadata and //internalized string respectively//CMS-remark: 8988K(13696K): 阶段过后的老年代占用及容量//10262K(19840K): 阶段过后的堆占用及容量
[CMS-concurrent-sweep-start]
[CMS-concurrent-sweep: 0.015/0.015 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]//标记已经完成,进行并发清理
[CMS-concurrent-reset-start]
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]//重置内部结构,为下次GC做准备

5、G1日志分析

JVM Optimization Learning(四) ---JVM Optimization Case环境继续使用此环境

[root@localhost java]# java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseG1GC com.lwz.jvm.T15_FullGC_Problem01
[GC pause (G1 Evacuation Pause) (young), 0.0091218 secs][Parallel Time: 7.8 ms, GC Workers: 4][GC Worker Start (ms): Min: 7838.5, Avg: 7842.2, Max: 7846.0, Diff: 7.5][Ext Root Scanning (ms): Min: 0.0, Avg: 1.0, Max: 2.0, Diff: 2.0, Sum: 4.0][Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.2][Object Copy (ms): Min: 0.0, Avg: 2.5, Max: 5.2, Diff: 5.2, Sum: 10.0][Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.4, Diff: 0.4, Sum: 1.0][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][GC Worker Total (ms): Min: 0.1, Avg: 3.9, Max: 7.6, Diff: 7.6, Sum: 15.5][GC Worker End (ms): Min: 7846.1, Avg: 7846.1, Max: 7846.1, Diff: 0.1][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.3 ms][Other: 1.0 ms][Choose CSet: 0.0 ms][Ref Proc: 0.5 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.3 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 12.0M(12.0M)->0.0B(10.0M) Survivors: 0.0B->2048.0K Heap: 12.0M(20.0M)->1952.0K(20.0M)][Times: user=0.02 sys=0.01, real=0.01 secs]
[GC pause (G1 Evacuation Pause) (young), 0.0184956 secs][Parallel Time: 16.2 ms, GC Workers: 4][GC Worker Start (ms): Min: 31098.3, Avg: 31098.9, Max: 31099.7, Diff: 1.3][Ext Root Scanning (ms): Min: 0.4, Avg: 2.9, Max: 8.0, Diff: 7.6, Sum: 11.4][Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.4, Diff: 0.4, Sum: 0.4][Object Copy (ms): Min: 7.5, Avg: 12.4, Max: 14.2, Diff: 6.7, Sum: 49.7][Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Termination Attempts: Min: 3, Avg: 4.2, Max: 8, Diff: 5, Sum: 17][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][GC Worker Total (ms): Min: 14.6, Avg: 15.4, Max: 15.9, Diff: 1.3, Sum: 61.7][GC Worker End (ms): Min: 31114.3, Avg: 31114.3, Max: 31114.3, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.8 ms][Other: 1.4 ms][Choose CSet: 0.0 ms][Ref Proc: 0.6 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.6 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 10.0M(10.0M)->0.0B(7168.0K) Survivors: 2048.0K->2048.0K Heap: 11.9M(20.0M)->6817.5K(20.0M)][Times: user=0.05 sys=0.01, real=0.02 secs]
[GC pause (G1 Evacuation Pause) (young) (to-space exhausted), 0.0245234 secs][Parallel Time: 16.8 ms, GC Workers: 4][GC Worker Start (ms): Min: 53252.5, Avg: 53252.7, Max: 53252.9, Diff: 0.4][Ext Root Scanning (ms): Min: 0.5, Avg: 0.7, Max: 0.9, Diff: 0.4, Sum: 2.8][Update RS (ms): Min: 2.9, Avg: 3.0, Max: 3.3, Diff: 0.4, Sum: 12.0][Processed Buffers: Min: 12, Avg: 14.2, Max: 18, Diff: 6, Sum: 57][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.2][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 12.1, Avg: 12.3, Max: 12.5, Diff: 0.5, Sum: 49.3][Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.3, Diff: 0.3, Sum: 0.6][Termination Attempts: Min: 1, Avg: 1.2, Max: 2, Diff: 1, Sum: 5][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1][GC Worker Total (ms): Min: 16.1, Avg: 16.2, Max: 16.5, Diff: 0.4, Sum: 65.0][GC Worker End (ms): Min: 53269.0, Avg: 53269.0, Max: 53269.0, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.7 ms][Other: 7.0 ms][Evacuation Failure: 5.8 ms][Choose CSet: 0.0 ms][Ref Proc: 0.4 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.6 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 7168.0K(7168.0K)->0.0B(1024.0K) Survivors: 2048.0K->2048.0K Heap: 13.7M(20.0M)->19.0M(20.0M)][Times: user=0.08 sys=0.00, real=0.02 secs]
[GC pause (G1 Evacuation Pause) (young) (initial-mark) (to-space exhausted), 0.0435448 secs][Parallel Time: 35.5 ms, GC Workers: 4][GC Worker Start (ms): Min: 56073.6, Avg: 56073.8, Max: 56073.9, Diff: 0.3][Ext Root Scanning (ms): Min: 0.5, Avg: 0.6, Max: 0.8, Diff: 0.3, Sum: 2.5][Update RS (ms): Min: 0.0, Avg: 3.5, Max: 14.1, Diff: 14.1, Sum: 14.1][Processed Buffers: Min: 0, Avg: 14.2, Max: 57, Diff: 57, Sum: 57][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 20.1, Avg: 30.9, Max: 34.6, Diff: 14.5, Sum: 123.6][Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.4, Diff: 0.4, Sum: 0.7][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][GC Worker Total (ms): Min: 35.1, Avg: 35.2, Max: 35.4, Diff: 0.3, Sum: 141.0][GC Worker End (ms): Min: 56109.0, Avg: 56109.0, Max: 56109.0, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.6 ms][Other: 7.4 ms][Evacuation Failure: 6.4 ms][Choose CSet: 0.0 ms][Ref Proc: 0.4 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.5 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 2048.0K->0.0B Heap: 20.0M(20.0M)->20.0M(20.0M)][Times: user=0.07 sys=0.00, real=0.04 secs]
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0001056 secs]
[GC concurrent-mark-start]
[Full GC (Allocation Failure)  20M->11M(20M), 0.0384932 secs][Eden: 0.0B(1024.0K)->0.0B(3072.0K) Survivors: 0.0B->0.0B Heap: 20.0M(20.0M)->11.1M(20.0M)], [Metaspace: 3879K->3873K(1056768K)][Times: user=0.05 sys=0.00, real=0.04 secs]
[GC concurrent-mark-abort]
[GC pause (G1 Evacuation Pause) (young), 0.0100011 secs][Parallel Time: 8.4 ms, GC Workers: 4][GC Worker Start (ms): Min: 65691.5, Avg: 65691.7, Max: 65691.8, Diff: 0.3][Ext Root Scanning (ms): Min: 0.4, Avg: 0.6, Max: 0.7, Diff: 0.3, Sum: 2.2][Update RS (ms): Min: 3.9, Avg: 4.0, Max: 4.1, Diff: 0.2, Sum: 16.0][Processed Buffers: Min: 13, Avg: 14.8, Max: 17, Diff: 4, Sum: 59][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 3.4, Avg: 3.5, Max: 3.6, Diff: 0.2, Sum: 13.9][Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.5][Termination Attempts: Min: 18, Avg: 22.8, Max: 26, Diff: 8, Sum: 91][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1][GC Worker Total (ms): Min: 8.0, Avg: 8.2, Max: 8.4, Diff: 0.3, Sum: 32.8][GC Worker End (ms): Min: 65699.8, Avg: 65699.8, Max: 65699.8, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.5 ms][Other: 1.0 ms][Choose CSet: 0.0 ms][Ref Proc: 0.5 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.4 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 3072.0K(3072.0K)->0.0B(1024.0K) Survivors: 0.0B->1024.0K Heap: 14.1M(20.0M)->13.6M(20.0M)][Times: user=0.04 sys=0.00, real=0.01 secs]
[GC pause (G1 Evacuation Pause) (young) (initial-mark), 0.0105135 secs][Parallel Time: 8.5 ms, GC Workers: 4][GC Worker Start (ms): Min: 69872.2, Avg: 69872.4, Max: 69872.6, Diff: 0.4][Ext Root Scanning (ms): Min: 0.5, Avg: 0.7, Max: 0.9, Diff: 0.4, Sum: 2.7][Update RS (ms): Min: 4.1, Avg: 4.2, Max: 4.3, Diff: 0.2, Sum: 16.7][Processed Buffers: Min: 12, Avg: 14.8, Max: 17, Diff: 5, Sum: 59][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 3.1, Avg: 3.2, Max: 3.3, Diff: 0.2, Sum: 12.8][Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.2][Termination Attempts: Min: 11, Avg: 14.2, Max: 16, Diff: 5, Sum: 57][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1][GC Worker Total (ms): Min: 7.9, Avg: 8.1, Max: 8.3, Diff: 0.4, Sum: 32.6][GC Worker End (ms): Min: 69880.6, Avg: 69880.6, Max: 69880.6, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.7 ms][Other: 1.4 ms][Choose CSet: 0.0 ms][Ref Proc: 0.7 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.5 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 1024.0K->1024.0K Heap: 14.6M(20.0M)->15.4M(20.0M)][Times: user=0.03 sys=0.00, real=0.01 secs]
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0029410 secs]
[GC concurrent-mark-start]
[GC concurrent-mark-end, 0.0485784 secs]
[GC remark [Finalize Marking, 0.0005557 secs] [GC ref-proc, 0.0003018 secs] [Unloading, 0.0014276 secs], 0.0029364 secs][Times: user=0.01 sys=0.00, real=0.00 secs]
[GC cleanup 15M->15M(20M), 0.0013613 secs][Times: user=0.00 sys=0.00, real=0.00 secs]
[GC pause (G1 Evacuation Pause) (young), 0.0114531 secs][Parallel Time: 9.6 ms, GC Workers: 4][GC Worker Start (ms): Min: 73775.8, Avg: 73775.9, Max: 73776.1, Diff: 0.3][Ext Root Scanning (ms): Min: 0.4, Avg: 0.5, Max: 0.7, Diff: 0.3, Sum: 2.2][Update RS (ms): Min: 5.7, Avg: 5.8, Max: 5.9, Diff: 0.3, Sum: 23.0][Processed Buffers: Min: 15, Avg: 15.2, Max: 16, Diff: 1, Sum: 61][Scan RS (ms): Min: 0.0, Avg: 0.2, Max: 0.3, Diff: 0.2, Sum: 0.7][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 2.7, Avg: 2.8, Max: 2.8, Diff: 0.1, Sum: 11.1][Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1][GC Worker Total (ms): Min: 9.1, Avg: 9.3, Max: 9.4, Diff: 0.3, Sum: 37.0][GC Worker End (ms): Min: 73785.2, Avg: 73785.2, Max: 73785.2, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.6 ms][Other: 1.3 ms][Choose CSet: 0.0 ms][Ref Proc: 0.6 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.4 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 1024.0K->1024.0K Heap: 16.4M(20.0M)->16.7M(20.0M)][Times: user=0.04 sys=0.00, real=0.01 secs]
[GC pause (G1 Evacuation Pause) (mixed) (to-space exhausted), 0.0406284 secs][Parallel Time: 34.3 ms, GC Workers: 4][GC Worker Start (ms): Min: 77404.1, Avg: 77404.4, Max: 77404.7, Diff: 0.6][Ext Root Scanning (ms): Min: 0.3, Avg: 0.6, Max: 0.9, Diff: 0.6, Sum: 2.2][Update RS (ms): Min: 4.1, Avg: 4.2, Max: 4.2, Diff: 0.1, Sum: 16.8][Processed Buffers: Min: 13, Avg: 15.2, Max: 18, Diff: 5, Sum: 61][Scan RS (ms): Min: 0.0, Avg: 0.1, Max: 0.4, Diff: 0.4, Sum: 0.5][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 28.7, Avg: 29.0, Max: 29.1, Diff: 0.4, Sum: 115.9][Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Termination Attempts: Min: 1, Avg: 1.2, Max: 2, Diff: 1, Sum: 5][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1][GC Worker Total (ms): Min: 33.6, Avg: 33.9, Max: 34.2, Diff: 0.6, Sum: 135.4][GC Worker End (ms): Min: 77438.3, Avg: 77438.3, Max: 77438.3, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.5 ms][Other: 5.8 ms][Evacuation Failure: 4.3 ms][Choose CSet: 0.0 ms][Ref Proc: 0.7 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.7 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 1024.0K->1024.0K Heap: 17.7M(20.0M)->19.1M(20.0M)][Times: user=0.07 sys=0.00, real=0.04 secs]
[GC pause (G1 Evacuation Pause) (young) (to-space exhausted), 0.0146382 secs][Parallel Time: 11.7 ms, GC Workers: 4][GC Worker Start (ms): Min: 77445.6, Avg: 77445.8, Max: 77446.3, Diff: 0.7][Ext Root Scanning (ms): Min: 0.0, Avg: 0.4, Max: 0.6, Diff: 0.6, Sum: 1.6][Update RS (ms): Min: 0.0, Avg: 2.3, Max: 5.0, Diff: 5.0, Sum: 9.3][Processed Buffers: Min: 0, Avg: 65.5, Max: 156, Diff: 156, Sum: 262][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 5.6, Avg: 8.3, Max: 10.6, Diff: 5.0, Sum: 33.1][Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.3, Diff: 0.3, Sum: 0.5][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][GC Worker Total (ms): Min: 10.7, Avg: 11.2, Max: 11.4, Diff: 0.7, Sum: 44.6][GC Worker End (ms): Min: 77457.0, Avg: 77457.0, Max: 77457.0, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.4 ms][Other: 2.6 ms][Evacuation Failure: 1.5 ms][Choose CSet: 0.0 ms][Ref Proc: 0.6 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.4 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 0.0B(1024.0K)->0.0B(1024.0K) Survivors: 1024.0K->0.0B Heap: 19.1M(20.0M)->19.1M(20.0M)][Times: user=0.02 sys=0.00, real=0.01 secs]

G1日志young     参照CMS日志查看

[GC pause (G1 Evacuation Pause) (young), 0.0091218 secs][Parallel Time: 7.8 ms, GC Workers: 4][GC Worker Start (ms): Min: 7838.5, Avg: 7842.2, Max: 7846.0, Diff: 7.5][Ext Root Scanning (ms): Min: 0.0, Avg: 1.0, Max: 2.0, Diff: 2.0, Sum: 4.0][Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.2][Object Copy (ms): Min: 0.0, Avg: 2.5, Max: 5.2, Diff: 5.2, Sum: 10.0][Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.4, Diff: 0.4, Sum: 1.0][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][GC Worker Total (ms): Min: 0.1, Avg: 3.9, Max: 7.6, Diff: 7.6, Sum: 15.5][GC Worker End (ms): Min: 7846.1, Avg: 7846.1, Max: 7846.1, Diff: 0.1][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.3 ms]  //清理Card table[Other: 1.0 ms][Choose CSet: 0.0 ms][Ref Proc: 0.5 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.3 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 12.0M(12.0M)->0.0B(10.0M) Survivors: 0.0B->2048.0K Heap: 12.0M(20.0M)->1952.0K(20.0M)][Times: user=0.02 sys=0.01, real=0.01 secs]

G1日志mixedGC--混合回收

查看日志回收是否回收正常,没回收代表不正常

[GC pause (G1 Evacuation Pause) (young) (initial-mark) (to-space exhausted), 0.0435448 secs]
//young -> 年轻代 Evacuation(疏散,撤离)-> 复制存活对象 
//initial-mark 混合回收的阶段(mixedGC),这里是YGC混合老年代回收[Parallel Time: 35.5 ms, GC Workers: 4]  //4个GC线程[GC Worker Start (ms): Min: 56073.6, Avg: 56073.8, Max: 56073.9, Diff: 0.3][Ext Root Scanning (ms): Min: 0.5, Avg: 0.6, Max: 0.8, Diff: 0.3, Sum: 2.5][Update RS (ms): Min: 0.0, Avg: 3.5, Max: 14.1, Diff: 14.1, Sum: 14.1][Processed Buffers: Min: 0, Avg: 14.2, Max: 57, Diff: 57, Sum: 57][Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.1][Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][Object Copy (ms): Min: 20.1, Avg: 30.9, Max: 34.6, Diff: 14.5, Sum: 123.6][Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.4, Diff: 0.4, Sum: 0.7][Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 4][GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0][GC Worker Total (ms): Min: 35.1, Avg: 35.2, Max: 35.4, Diff: 0.3, Sum: 141.0][GC Worker End (ms): Min: 56109.0, Avg: 56109.0, Max: 56109.0, Diff: 0.0][Code Root Fixup: 0.0 ms][Code Root Purge: 0.0 ms][Clear CT: 0.6 ms]   //清理Card table[Other: 7.4 ms][Evacuation Failure: 6.4 ms][Choose CSet: 0.0 ms][Ref Proc: 0.4 ms][Ref Enq: 0.0 ms][Redirty Cards: 0.5 ms][Humongous Register: 0.0 ms][Humongous Reclaim: 0.0 ms][Free CSet: 0.0 ms][Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 2048.0K->0.0B 
Heap: 20.0M(20.0M)->20.0M(20.0M)][Times: user=0.07 sys=0.00, real=0.04 secs]
//以下是混合回收其他阶段
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0001056 secs]
[GC concurrent-mark-start]
//无法evacuation,进行FGC
[Full GC (Allocation Failure)  20M->11M(20M), 0.0384932 secs][Eden: 0.0B(1024.0K)->0.0B(3072.0K) Survivors: 0.0B->0.0B 
Heap: 20.0M(20.0M)->11.1M(20.0M)], [Metaspace: 3879K->3873K(1056768K)][Times: user=0.05 sys=0.00, real=0.04 secs]
[GC concurrent-mark-abort]

2、GC参数

2.1、GC常用参数

-Xmn -Xms -Xmx -Xss
  年轻代 最小堆 最大堆 栈空间
-XX:+UseTLAB
  使用TLAB,默认打开
-XX:+PrintTLAB
  打印TLAB的使用情况
-XX:TLABSize
  设置TLAB大小
-XX:+DisableExplictGC
  System.gc()不管用 ,FGC
-XX:+PrintGC

  打印GC信息
-XX:+PrintGCDetails

  打印GC详细信息
-XX:+PrintHeapAtGC

  打印GC堆栈信息
-XX:+PrintGCTimeStamps

  打印发生GC系统信息
-XX:+PrintGCApplicationConcurrentTime (低)
  打印应用程序时间
-XX:+PrintGCApplicationStoppedTime (低)
  打印应用程序暂停时长
-XX:+PrintReferenceGC (重要性低)
  记录回收了多少种不同引用类型的引用
-verbose:class
  类加载详细过程
-XX:+PrintVMOptions

  打印JVM运行时参数
-XX:+PrintFlagsFinal  (需要会)

   查找JVM命令设置的最终值

[root@localhost ~]# java -XX:+PrintFlagsFinal -version | grep G1double G1ConcMarkStepDurationMillis              = 10.000000                                                                {product}uintx G1ConcRSHotCardLimit                      = 4                                                                        {product}uintx G1ConcRSLogCacheSize                      = 10                                                                       {product}intx G1ConcRefinementGreenZone                 = 0                                                                        {product}intx G1ConcRefinementRedZone                   = 0                                                                        {product}intx G1ConcRefinementServiceIntervalMillis     = 300                                                                      {product}uintx G1ConcRefinementThreads                   = 0                                                                        {product}intx G1ConcRefinementThresholdStep             = 0                                                                        {product}intx G1ConcRefinementYellowZone                = 0                                                                        {product}uintx G1ConfidencePercent                       = 50                                                                       {product}uintx G1HeapRegionSize                          = 0                                                                        {product}uintx G1HeapWastePercent                        = 5                                                                        {product}uintx G1MixedGCCountTarget                      = 8                                                                        {product}intx G1RSetRegionEntries                       = 0                                                                        {product}uintx G1RSetScanBlockSize                       = 64                                                                       {product}intx G1RSetSparseRegionEntries                 = 0                                                                        {product}intx G1RSetUpdatingPauseTimePercent            = 10                                                                       {product}intx G1RefProcDrainInterval                    = 10                                                                       {product}uintx G1ReservePercent                          = 10                                                                       {product}uintx G1SATBBufferEnqueueingThresholdPercent    = 60                                                                       {product}intx G1SATBBufferSize                          = 1024                                                                     {product}intx G1UpdateBufferSize                        = 256                                                                      {product}bool G1UseAdaptiveConcRefinement               = true                                                                     {product}bool UseG1GC                                   = false                                                                    {product}
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

-XX:+PrintFlagsInitial  (需要会)

   查找JVM命令初始化默认值

[root@localhost ~]# java -XX:+PrintFlagsInitial -version | grep CMSbool CMSAbortSemantics                         = false                               {product}uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}uintx CMSBitMapYieldQuantum                     = 10485760                            {product}uintx CMSBootstrapOccupancy                     = 50                                  {product}bool CMSClassUnloadingEnabled                  = true                                {product}uintx CMSClassUnloadingMaxInterval              = 0                                   {product}bool CMSCleanOnEnter                           = true                                {product}bool CMSCompactWhenClearAllSoftRefs            = true                                {product}uintx CMSConcMarkMultiple                       = 32                                  {product}bool CMSConcurrentMTEnabled                    = true                                {product}uintx CMSCoordinatorYieldSleepCount             = 10                                  {product}bool CMSDumpAtPromotionFailure                 = false                               {product}bool CMSEdenChunksRecordAlways                 = true                                {product}uintx CMSExpAvgFactor                           = 50                                  {product}bool CMSExtrapolateSweep                       = false                               {product}uintx CMSFullGCsBeforeCompaction                = 0                                   {product}uintx CMSIncrementalDutyCycle                   = 10                                  {product}uintx CMSIncrementalDutyCycleMin                = 0                                   {product}bool CMSIncrementalMode                        = false                               {product}uintx CMSIncrementalOffset                      = 0                                   {product}bool CMSIncrementalPacing                      = true                                {product}uintx CMSIncrementalSafetyFactor                = 10                                  {product}uintx CMSIndexedFreeListReplenish               = 4                                   {product}intx CMSInitiatingOccupancyFraction            = -1                                  {product}uintx CMSIsTooFullPercentage                    = 98                                  {product}double CMSLargeCoalSurplusPercent                = 0.950000                            {product}double CMSLargeSplitSurplusPercent               = 1.000000                            {product}bool CMSLoopWarn                               = false                               {product}uintx CMSMaxAbortablePrecleanLoops              = 0                                   {product}intx CMSMaxAbortablePrecleanTime               = 5000                                {product}uintx CMSOldPLABMax                             = 1024                                {product}uintx CMSOldPLABMin                             = 16                                  {product}uintx CMSOldPLABNumRefills                      = 4                                   {product}uintx CMSOldPLABReactivityFactor                = 2                                   {product}bool CMSOldPLABResizeQuicker                   = false                               {product}uintx CMSOldPLABToleranceFactor                 = 4                                   {product}bool CMSPLABRecordAlways                       = true                                {product}uintx CMSParPromoteBlocksToClaim                = 16                                  {product}bool CMSParallelInitialMarkEnabled             = true                                {product}bool CMSParallelRemarkEnabled                  = true                                {product}bool CMSParallelSurvivorRemarkEnabled          = true                                {product}uintx CMSPrecleanDenominator                    = 3                                   {product}uintx CMSPrecleanIter                           = 3                                   {product}uintx CMSPrecleanNumerator                      = 2                                   {product}bool CMSPrecleanRefLists1                      = true                                {product}bool CMSPrecleanRefLists2                      = false                               {product}bool CMSPrecleanSurvivors1                     = false                               {product}bool CMSPrecleanSurvivors2                     = true                                {product}uintx CMSPrecleanThreshold                      = 1000                                {product}bool CMSPrecleaningEnabled                     = true                                {product}bool CMSPrintChunksInDump                      = false                               {product}bool CMSPrintEdenSurvivorChunks                = false                               {product}bool CMSPrintObjectsInDump                     = false                               {product}uintx CMSRemarkVerifyVariant                    = 1                                   {product}bool CMSReplenishIntermediate                  = true                                {product}uintx CMSRescanMultiple                         = 32                                  {product}uintx CMSSamplingGrain                          = 16384                               {product}bool CMSScavengeBeforeRemark                   = false                               {product}uintx CMSScheduleRemarkEdenPenetration          = 50                                  {product}uintx CMSScheduleRemarkEdenSizeThreshold        = 2097152                             {product}uintx CMSScheduleRemarkSamplingRatio            = 5                                   {product}double CMSSmallCoalSurplusPercent                = 1.050000                            {product}double CMSSmallSplitSurplusPercent               = 1.100000                            {product}bool CMSSplitIndexedFreeListBlocks             = true                                {product}intx CMSTriggerInterval                        = -1                                  {manageable}uintx CMSTriggerRatio                           = 80                                  {product}intx CMSWaitDuration                           = 2000                                {manageable}uintx CMSWorkQueueDrainThreshold                = 10                                  {product}bool CMSYield                                  = true                                {product}uintx CMSYieldSleepCount                        = 0                                   {product}uintx CMSYoungGenPerWorker                      = 67108864                            {pd product}uintx CMS_FLSPadding                            = 1                                   {product}uintx CMS_FLSWeight                             = 75                                  {product}uintx CMS_SweepPadding                          = 1                                   {product}uintx CMS_SweepTimerThresholdMillis             = 10                                  {product}uintx CMS_SweepWeight                           = 75                                  {product}bool PrintCMSInitiationStatistics              = false                               {product}intx PrintCMSStatistics                        = 0                                   {product}bool UseCMSBestFit                             = true                                {product}bool UseCMSCollectionPassing                   = true                                {product}bool UseCMSCompactAtFullCollection             = true                                {product}bool UseCMSInitiatingOccupancyOnly             = false                               {product}
[root@localhost ~]#

-Xloggc:opt/log/gc.log
-XX:MaxTenuringThreshold
  GC升代年龄,最大值15
锁自旋次数 -XX:PreBlockSpin 热点代码检测参数-XX:CompileThreshold 逃逸分析 标量替换 
不建议设置

2.2、Parallel常用参数

-XX:SurvivorRatio
-XX:PreTenureSizeThreshold
  大对象到底多大
-XX:MaxTenuringThreshold

  GC升代年龄,最大值15
-XX:+ParallelGCThreads
  并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
-XX:+UseAdaptiveSizePolicy
  自动选择各区大小比例

2.3、CMS常用参数

-XX:+UseConcMarkSweepGC

  启动CMS垃圾回收器
-XX:ParallelCMSThreads
  CMS线程数量
-XX:CMSInitiatingOccupancyFraction
  使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收)

怎么解决CMS回收器,浮动垃圾和碎片化的问题?
-XX:+UseCMSCompactAtFullCollection
  在FGC时进行压缩
-XX:CMSFullGCsBeforeCompaction
  多少次FGC之后进行压缩

-XX:+CMSClassUnloadingEnabled

  回收不用的class
-XX:CMSInitiatingPermOccupancyFraction
  达到什么比例时进行Perm回收
GCTimeRatio
  设置GC时间占用程序运行时间的百分比,是一个建议时间
-XX:MaxGCPauseMillis
  停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

2.4、G1常用参数

-XX:+UseG1GC

  启动G1GC
-XX:MaxGCPauseMillis
  建议值,G1会尝试调整Young区的块数来达到这个值
-XX:GCPauseIntervalMillis
  GC的间隔时间
-XX:+G1HeapRegionSize
  设置分区大小,建议逐渐增大该值,1 2 4 8 16 32。
  随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
  ZGC做了改进(动态区块大小)
G1NewSizePercent
  新生代最小比例,默认为5%
G1MaxNewSizePercent
  新生代最大比例,默认为60%
GCTimeRatio
  GC时间建议比例,G1会根据这个值调整堆空间
ConcGCThreads
  线程数量
InitiatingHeapOccupancyPercent
  启动G1的堆空间占用比例

JVM Optimization Learning(四)

不断学习才能不断提高!
生如蝼蚁,当立鸿鹄之志,命比纸薄,应有不屈之心。
乾坤未定,你我皆是黑马,若乾坤已定,谁敢说我不能逆转乾坤?
努力吧,机会永远是留给那些有准备的人,否则,机会来了,没有实力,只能眼睁睁地看着机会溜走。

相关文章:

JVM Optimization Learning(五)

目录 一、JVM Optimization 1、G1 1、G1内存模型 2、基础概念 3、G1特点: 4、CMS日志分析 5、G1日志分析 2、GC参数 2.1、GC常用参数 2.2、Parallel常用参数 2.3、CMS常用参数 2.4、G1常用参数 一、JVM Optimization 1、G1 G1官网说明:Gar…...

Java项目学生管理系统一前后端环境搭建

在现代的软件开发中,学生管理系统是一个常见的应用场景。通过学生管理系统,学校能够方便地管理学生的信息、课程安排和成绩等数据。本文将介绍如何使用Java语言搭建一个学生管理系统的前后端环境,并提供一个简单的示例。 1.环境搭建 学生管…...

LeetCode:169.多数元素(哈希表)

题目 第一版 思路 直接开个哈希表&#xff0c;存储每个数组中的数字和对应出现的次数。然后排序后找出对应最大value值的key。 代码 class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer>map new HashMap<Integer,Integer>();for(…...

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令&#xff1a; -name 15.grep指令 16.zip/unzip指令&#xff1a; 17.tar…...

vue2+datav可视化数据大屏(1)

开始 &#x1f4d3; 最近打算出一个前端可视化数据大屏的系列专栏&#xff0c;这次将很全面的教大家设计可视化大屏&#xff0c;从开始到打包结束&#xff0c;其中&#xff0c;包括如何设计框架&#xff0c;如何封装axios&#xff0c;等等&#xff0c;本次使用的数据均为mock数…...

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…...

Javascript 函数介绍

Javascript 函数介绍 很多教程书一上来就讲解一堆语法&#xff0c;例如函数定义、函数调用什么。等读者看完了函数这一章都没搞懂什么是函数。 在讲解什么叫函数之前&#xff0c;我们先看下面一段代码&#xff1a; <!DOCTYPE html> <html xmlns"http://www.w3.…...

php 粉丝关注功能实现

实现粉丝关注功能的步骤如下&#xff1a; 创建用户表&#xff08;user&#xff09;和关注表&#xff08;follow&#xff09;&#xff1a; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(255) NOT NULL,email varchar(255) NOT NULL,password varc…...

深入浅出理解kafka ---- 万字总结

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…...

一对一聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis查询中返回值四种情况

第一章 Mybatis查询中返回值四种情况 1.1 查询单行数据返回单个对象 /*** 通过id获取员工信息*/ public Employee selectEmpById(int empId);<select id"selectEmpById" resultType"employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHE…...

华为云安全组规则

初始发布cce,快被安全组搞死了。现在把自己的研究成果综合一下,在这里给自己留痕,希望对迷惑的朋友有帮助。 先搞懂安全组是个啥东东: 安全组规则 操作场景 安全组实际是网络流量访问策略,通过访问策略可以控制流量入方向规则和出方向规则,通过这些规则可以为加入安全组…...

MySQL之binlog文件过多处理方法

背景 MySQL由于大量读写&#xff0c;导致binlog文件特别的多。从而导致服务器disk空间不足问题。 先备份binlog文件 tar -zcvf mysql.tar.gz mysql/data/mysql-bin.00* 修改MySQL配置 binlog过期时间 show variables like expire_logs_days; 这里 0 表示 永不过期 如果为 n…...

力扣面试150题 | 88.合并两个有序数组

力扣面试150题 &#xff5c; 88.合并两个有序数组 题目描述解题思路代码实现复杂度分析 题目描述 88.合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并…...

Spring Cache快速入门教程及案例

1. Spring Cache介绍 Spring Cache提供了一组注解&#xff0c;使开发者能够轻松地在方法上定义缓存行为 Spring Cache抽象了缓存的底层实现&#xff0c;允许开发者选择使用不同的缓存提供者&#xff08;如 Ehcache、Redis、Caffeine 等&#xff09;。通过配置相应的缓存管理器…...

pycharm中debug,py文件

1、先把需要的实参传入 2、在合适位置打上断点 3、在小三角旁边右键调用调试 4.步进/步出查看 5.选择单步执行&#xff0c;走的更慢...

虚拟化之指令的Trap和仿真

有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…...

Python函数默认参数设置

在某些情况下&#xff0c;程序需要在定义函数时为一个或多个形参指定默认值&#xff0c;这样在调用函数时就可以省略为该形参传入参数值&#xff0c;而是直接使用该形参的默认值。 为形参指定默认值的语法格式如下&#xff1a; 形参名 默认值 从上面的语法格式可以看出&…...

js moment计算当前时间到24:00:00的剩余时间

2023.12.7今天我学习了如何计算当前的时间到24:00:00剩下的时间&#xff0c;https://momentjs.cn/ const now moment(); // 获取当前时间const endOfDay moment().endOf(day); // 设置当天的 23:59:59const duration moment.duration(endOfDay.diff(now)); // 计算剩余时间的…...

【UE5】瞬移+马赛克过渡效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 添加第三人称游戏资源到内容浏览器 3. 新建一个材质&#xff0c;这里命名为“M_Pixel” 打开“M_Pixel”&#xff0c;设置材质域为“后期处理” 在材质图表中添加如下节点 此时效果如下&#xff0c;已经有马赛克的…...

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库

文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统&#xff0c;采用雪花算法实现唯一 ID&#xff1b;实现缓存架构&#xff0c;采用 LRU &#xff08;最近最少使用&#xff09;算法。 雪花算法 分布式 ID 生成算法的有很多种&#x…...

ArcGIS Pro中怎么设置标注换行

在ArcGIS Pro中进行文字标注的时候&#xff0c;如果标注的字段内容太长&#xff0c;直接标注的话会不美观&#xff0c;而且还会影响旁边的标注显示&#xff0c;这里为大家介绍一下在ArcGIS Pro中设置文字换行的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的…...

MAX26——快速人物毛发插片工具 Hair cards tool

一提到毛发插件&#xff0c;我们一般想起的就是maya的 xgrn 或者max的ox。但是这些都是我们做影视级数字人用的。比较费性能也比较费面 下面分享一个干货 Hair cards tool 这个插件操作不像xgen与ox那么复杂。基本上0基础上手5分钟不到。就能插片出不错的效果。比较适用于&…...

一天一个设计模式---原型模式

基本概念 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;其主要目的是通过复制现有对象来创建新对象&#xff0c;而不是通过实例化类。原型模式允许在运行时动态创建对象&#xff0c;同时避免了耦合与子类化。 在原型模式中&#xff0…...

<习题集><LeetCode><链表><2/19/21/23/24>

目录 2. 两数相加 19. 删除链表的倒数第 N 个结点 21. 合并两个有序链表 23. 合并 K 个升序链表 24. 两两交换链表中的节点 2. 两数相加 https://leetcode.cn/problems/add-two-numbers/ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//head是cur链表头节点…...

C++实现DFS、BFS、Kruskal算法和Prim算法、拓扑排序、Dijkstra算法

背景&#xff1a; 实现要求&#xff1a; 根据图的抽象数据类型的定义&#xff0c;请采用邻接矩阵来存储图1&#xff0c;采用邻接表来存储图2&#xff0c;并完成如下操作&#xff1a;对图1无向图进行深度优先遍历和广度优先遍历。对图1无向图采用Kruskal算法和Prim算法得出最小…...

Spring 依赖注入的三种方式优缺点

小王学习录 前言属性注入1. 属性注入的优点2. 属性注入的缺点 Setter注入Setter注入的优点Setter注入的缺点 构造方法注入1. 构造方法的优点 总结补充Aurowired注解和Resource注解的区别 前言 在前面的文章中介绍了基于注解的方式将Bean存储到Spring中, 接下来介绍如何基于注解…...

代理模式介绍(静态代理、jdk动态代理、cglib代理)

一、静态代理 &#xff08;一&#xff09;定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问&#xff1b; 2、涉及到的角色 &#xff08;1&#xff09;抽象主题角色&#xff1a;真实主题和代理主题的共同接口&#xff0c;便于在使用真实主题的地方都可以使用代理…...

设计模式基础——工厂模式剖析(2/2)

目录 一、工厂模式 1.1 工厂模式的定义 1.2 工厂模式的设计意图 1.3 工厂模式主要解决的问题 1.4 工厂模式的缺点 1.5 实际的应用案例 1. 数据库连接池 2. 图形用户界面&#xff08;GUI&#xff09;组件 3. 文件操作 二、各种工厂模式的变形 1.1 简单工厂模式&#…...

spark3.x 读取hudi报错

报错信息如下: Exception in thread "main" org.apache.hudi.exception.HoodieUpsertException: Failed to upsert for commit time 20231201203145254 at org.apache.hudi.table.action.commit.BaseWriteHelper.write(BaseWriteHelper.java:64) at org.apa…...

微信小程序中block和View组件的使用区别

block和View组件都是用于布局的组件: 1. Block组件&#xff1a; Block组件是一个无实际显示效果的组件&#xff0c;它主要用于包裹一组组件&#xff0c;并提供了类似于div的作用。使用Block组件可以将一组组件进行分组&#xff0c;便于样式的管理和控制。Block组件不会在页面…...

代码混淆技术探究与工具选择

代码混淆技术探究与工具选择 引言 在软件开发中&#xff0c;保护程序代码的安全性是至关重要的一环。代码混淆&#xff08;Obfuscated code&#xff09;作为一种常见的保护手段&#xff0c;通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概…...

selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明 selenium遇到下面这种元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格&#xff0c;但是前端错误的这种写法(如下图)&#xff0c;会造成使用id定位不到元素&#xff0c;如&#xff1a; find…...

gma 空间绘图实战(1):绘制多个子图,连接并展示局部放大区域

安装 gma&#xff1a;pip install gma 本文基于&#xff1a;gma 2.0.3&#xff0c;Python 3.10 本文用到的矢量数据为&#xff1a;CTAmap 1.12。来源于 https://www.shengshixian.com/ 。&#xff08;感谢锐多宝&#xff09; 绘图目标 参考代码 import matplotlib.pyplot as p…...

Unity中C#使用协程控制Shader材质变化

文章目录 前言一、协程是什么二、在Unity中使用协程1、我们在 Start 中测试一下协程的执行顺序2、我们实现一个点击按钮实现角色受击效果 三、协程中的动画过渡1、首先&#xff0c;在协程内实现中毒并且消散的效果2、在 OnGUI 内&#xff0c;给一个新按钮使用刚刚定义的协程 四…...

WordPress禁止显示指定类别的文章

使用wordpress禁止输出指定类别的文章可以给get_posts()函数传个数组参数&#xff0c;如下&#xff1a; <div class"widget" id"diary1"> <h3>随机呈现</h3> <ul> <?php $argsarray( numberposts>16, category>-9,-12, …...

C#里面的泛型(T),泛型类,泛型方法,泛型接口等简单解释

https://blog.csdn.net/dap769815768/article/details/81946506 只是比较简单的解释&#xff0c;在实际使用中&#xff0c;如果遇到需要深入研究的场景&#xff0c;再翻阅相关资料深入研究下。 一、泛型T 这个T在实际使用中很常见&#xff0c;比如List<T>。其实我们还…...

C语言——指针(五)

&#x1f4dd;前言&#xff1a; 上篇文章C语言——指针&#xff08;四&#xff09;更加深入的介绍了不同类型指针的特点&#xff0c;这篇文章主要想记录一下函数与指针的结合运用以及const和assert关于指针的用法&#xff1a; 1&#xff0c;函数与指针 2&#xff0c;const 3&am…...

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑气电联合需求响应的气电综合能源配网系统协调优化运行》

这个标题涉及到一个涉及气体&#xff08;天然气&#xff09;和电力的综合能源配网系统&#xff0c;并且强调了考虑气电联合需求响应的协调优化运行。让我们逐步解读&#xff1a; 气电综合能源配网系统&#xff1a; 这指的是一个结合了气体&#xff08;通常是天然气&#xff09;…...

PostgreSQL 主键和唯一键的区别

主键和唯一键的区别 主键&#xff08;Primary Key&#xff09;&#xff1a; 主键是用于唯一标识表中的每一条记录的键。主键必须是唯一的&#xff0c;不允许为空。一个表只能有一个主键。主键可以由一个或多个字段组成。主键的值在整个表中必须是唯一的&#xff0c;用于确保数据…...

删除表格中的所有绘图

Ctrl G 调出定位的对话框再点击定位条件 按Delete键&#xff0c;删除...

Linux卸载Nginx

1、停止Nginx软件 #/usr/local/nginx/sbin/nginx-sstop 或者kill进程 #ps -ef|grep nginx #kill -9 PID 2、查找根下所有名子包含nginx的文件 #sudofind/-namenginx* 3、执行命令删掉nignx安装的相关文件 # rm -rf /usr/local/sbin/nginx # rm -rf /usr/local/nginx # r…...

Qt之QGraphicsView —— 笔记1:绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…...

SpringIoC原理

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…...

如何对售后服务的全流程进行精细化的管理?

——“如何对售后服务的全流程进行精细化的管理&#xff1f;” ——“售后又是一个十分复杂的过程&#xff0c;仅靠手工或者电子表格记录这些内容&#xff0c;肯定是低效率、易出错的。最好的办法是借助合适的管理工具进行精细化的过程管理。” 假设你购买了一台新的家用电器…...

SAP UI5 walkthrough step2 Bootstrap

我的理解&#xff0c;这就是一个引导指令 1.我们右键打开命令行--执行 ui5 use OpenUI5 2.执行命令&#xff1a;ui5 add sap.ui.core sap.m themelib_sap_horizon 执行完之后&#xff0c;会更新 yaml 文件 3.修改index.html <!DOCTYPE html> <html> <head&…...

Gemini:定义下一代人工智能的里程碑

Google最近发布号称世界最强的大模型"Gemini"&#xff0c;其强大多模态LLM&#xff0c;标志着AI技术的一个新时代。 Gemini作为"迄今为止最强大的AI模型"之一&#xff0c;其独特之处在于它融合了多种模式的处理能力&#xff0c;能够同时理解和生成文本、代…...

一些系统日常运维命令和语句

一、前言 记录一些日常系统运维的命令和语句 二、linux命令与语句 1、linux查看各目录使用磁盘情况 du -h /home home为目录 du -h /home 2.查看内存使用情况 free -h 3、查看进程和CPU使用情况 top top 三、数据库语句 1、统计mysql数据库表数量 SELECT COUNT(*) A…...

微信小程序uni.chooseImage()无效解决方案

Bug场景&#xff1a; 微信小程序在上传图片时可以通过 uni.chooseImage()方案进行上传&#xff0c;这里不再赘述具体参数。一直项目都可以正常使用&#xff0c;突然有一天发现无法使用该方法&#xff0c;于是查了一下&#xff0c;发现是用户隐私协议问题。故记录一下解决方案。…...

Rust深入浅出:编程的深邃大海中的奇妙冒险

第一章&#xff1a;前言 欢迎来到Rust的深邃大海&#xff0c;这里是一片充满挑战和奇妙冒险的领域。在这篇文章中&#xff0c;我们将深入浅出&#xff0c;探索Rust编程语言的深层次特性&#xff0c;并通过诙谐而深刻的方式&#xff0c;带你走进这个奇妙的编程世界。 第二章&a…...