0
点赞
收藏
分享

微信扫一扫

Web3.0数字货币有哪些?

往复随安_5bb5 2023-07-06 阅读 93

JVM G1

G1 (Garbage-First) : 面向服务器的垃圾收集器

  • 主要针对 : 多处理器 , 大容量内存的机器
  • 即满足 GC 停顿时间要求 , 又有高吞吐量性能

特点:

  • 并行与并发:用多个 CPU (CPU 或 CPU 核心) 来缩短 Stop-The-World 停顿时间
  • 空间整合:全局基于标记-整理算法;局部基于标记-复制算法
  • 可预测的停顿:建立可预测的停顿时间模型,能指定 GC 消耗时间 < N 毫秒

G1 划分 : 将 Java 堆分为多个大小相等的独立区域 (Region)

  • 逻辑的新生代/ 老年代
  • 每个 Region 大小都一样 [1M - 32M] , 当对象太大 , > Region 的 50% , 就放到 H 中
  • 设置 Region : -XX:G1HeapRegionSize=M

image.png

G1 收集器的步骤:

  • 初始标记 ( Initial Marking ) : 标记 GC Roots 能关联的对象,并修改 TAMS 值,需暂停用户线程
  • 并发标记 ( Concurrent Marking ) : 从 GC Roots 进行可达性分析,找出存活对象,与用户线程并发执行
  • 最终标记 ( Final Marking ) : 修正并发标记时 , 因用户线程导致的变动数据,需暂停用户线程
  • 筛选回收 (Live Data Counting and Evacuation ) : 对各 Region 的回收成本进行排序,根据用户设定 GC 停顿时间 , 制定回收计划

image.png

TLAB 流程 :

image.png

GCViewer 分析吞吐量和响应时间

吞吐量      						  暂停时间   							  GC 数
Throughput  Min Pause   Max Pause   Avg Pause   GC count
 99.16%     0.00016s     0.0137s     0.00559s     12

参数 :

# 开启 G1 垃圾收集器
-XX: +UseG1GC 

# 设置每个 Region 大小,是 2 的幂次,1MB-32MB 之间
-XX: G1HeapReginSize 

#  最大停顿时间
# 		在 100ms - 200ms 左右
# 		原因 : 太小 , 会跟不上垃圾生成速度 , 导致 Full GC
-XX:MaxGCPauseMillis

# 并行 GC 工作的线程数
-XX:ParallelGCThread 

# 并发标记的线程数
#   太高 , 会导致转移失败
#   太低 , 导致标记频繁
-XX:ConcGCThreads 

# 默认 45% : GC堆占用达到多少时, 开始垃圾收集 
-XX:InitiatingHeapOcccupancyPercent 

# 调整内存
#    G1 会自动调整新生代和老年代的大小
-XX:MetaspaceSize=100M
-Xms300M
-Xmx300M


# MixedGC
-XX:InitiatingHeapOccupancyPercent
-XX:G1MixedGCLiveThresholdPercent
-XX:G1MixedGCCountTarger
-XX:G1OldCSetRegionThresholdPercent
举报

相关推荐

0 条评论