前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java11 的 G1 垃圾收集器

Java11 的 G1 垃圾收集器

作者头像
没有故事的陈师傅
发布于 2023-11-16 03:53:03
发布于 2023-11-16 03:53:03
52000
代码可运行
举报
文章被收录于专栏:运维开发故事运维开发故事
运行总次数:0
代码可运行

首先我先抛出以下几个问题:

  1. 很多服务需要过一段时间重启一次,如果不重启系统就会越来越慢?
  2. 突然一个中间件挂了一段时间过后,但是一些不相关的服务越来越卡,后面 OOM?
  3. 上线一个功能过后,CPU 就飙升到 100%,但是服务还是正常运行?
  4. 服务的某一个 CPU 出现有规律的,周期性的尖刺该如何解决?

作为 5 年以上工作经验的技术人员,或多或少在系统维护,系统保障,系统调优遇到过上面的这几个场景,你可能是通过重启,调整一些 jvm 参数解决,如果大家需要深入的探究找到问题的原因,可以耐心看看下文我对 G1 的一些总结。

本文讲哪些东西?

  1. 堆布局(以 Region 为基础划分:新生代(Eden 区、Survivor 区)、年老代、Humongous 区域)
  2. 垃圾收集周期
  3. GC 运作过程:初始标记、并发标记、最终标记、筛选回收
  4. GC 类型:Minor GC、Full GC 、Mixed GC
  5. CSet (年轻代需要收集的 Region 集合就是 CSet)
  6. 跨代引用
  7. 停顿预测模型
  8. GC 日志分析

G1 内存堆布局

G1 的英文全称是 Garbagge First,是一个有分代,按照 Region 的方式进行内存布局的垃圾收集器。

上图,我将一些 Region 标明了 H,它代表Humongous,这表示这些 Region 存储的是巨大对象(humongous object,H-obj),即大小大于等于 region 一半的对象。H-obj 有如下几个特征:

  • H-obj 直接分配到了old gen,防止了反复拷贝移动。
  • H-obj 在 global concurrent marking 阶段的 cleanup 和 full GC阶段回收。
  • 在分配 H-obj 之前先检查是否超过 initiating heap occupancy percent 和 the marking threshold, 如果超过的话,就启动 global concurrent marking,为的是提早回收,防止 evacuation failures 和 full GC。

GC 类型

  1. Young GC,垃圾收集范围:年轻代区域 + 大对象区
  2. Mixed GC,垃圾收集范围:年轻代区域 + 老年区 + 大对象区
  3. Full GC,垃圾收集范围:年轻代区域 + 老年区 + 大对象区 + 元空间

Collection Set (收集区域)

Collection Set 就是我们垃圾收集器的一个区域,在不同的垃圾回收阶段,会有不同的区域。

  • Young GC, 垃圾收集区域包括:年轻代区域 + 大对象区
  • Mixed GC, 垃圾收集区域包括:年轻代区域 + 老年区 + 大对象区

跨代引用

Young GC 主要是清理,新生代中的对象,我们知道整个堆空间包括老年代,新生代,我们在 Young GC 过程中会去找 GCRoots 然后判断对象是是否可达, 如果不可达,如果可达就标记。如果对于老年代中引用新生代的对象,我们如果要找出来就就需要对老年代进行全扫描,这样是不太现实的。所以 G1 通过记忆集的形式记录了老年代对新生代的引用。具体在 G1 中通过 CarTable 来实现记忆集。

RSet(记忆集)

记录了其它 Region 中的对象到 Region 的引用。RSet 的价值在于使得垃圾回收不需要扫描整个堆,能够快速定位到真正引用它的堆对象地址。ReSet 本身就是一个 Hash 表,存储在新生代的每个 Region 中。但是存储需要消耗空间,多的能达到百分之 20。因此G1对内存的空间要求较高(小空间没资本玩),空间越大性能越彪悍。

CardTable (卡表)

由于新生代GC时,需要扫描整个old区,效率非常低。所以old区就是用卡表的方式进行一次逻辑分区。一般一页卡表的大小是2的n次幂。每一个区域也是用Key,Value结构进行记录。每一区域记录为Key不重复,Value则记录这片区域的老年代对象与新生代对象是否存在引用关系,存在则标记为1,否则为0。记录完毕后把value为1的key作为ReSet的key进行记录,并且ReSet的value存储引用,从而提高跨代引用的查询效率。

停顿预测模型

所有的预测都是基于历史的拟合,HotSpot使用了基于方差与标准差的技术。参考:https://sdww2348115.github.io/jvm/g1/PausePredictionModel

G1 垃圾收集周期

图片来源 Oracle 官网

G1 有两个阶段,它会在这两个阶段往返,分别是 Young-only,Space Reclamation.

  1. Young-only 包含一系列的操作,如果长期存活的对象会逐渐转移到 Old gen
  2. Space Reclamation G1 会递进地回收 Old gen 的空间,同时也处理 Young region

图是来自 Oracle 上对 GC 周期的描述,实心圆都表示一次 GC 停顿

  • 蓝色 Young-only
  • 黄色 标记过程的停顿
  • 红色 Mixed GC 停顿

在几次 GC 后,Old gen 的对象占有比超过了 InitiatingHeapOccupancyPercent (简称为IHOP,默认值为45,这个值是启动并发标记的阈值,当老年代使用内存占用堆内存的45%启动并发标记。如果该区域过大,可能会导致mixed gc跟不上内存分配的速度从而导致full gc ),gc 就会进入并发标记准备 (Concurrent Mark)。

  • G1 在每一次 Young 回收中都会查找活对象 (有引用的对象)
  • G1 在 old region 并发查找存活对象
    • 是 Concurrent Marking
    • 可能花费很长时间
    • 不会停止 Java 应用
  • G1 没有活对象的引用信息是不能进行垃圾回收的
    • Mixed GC 依赖 Concurrent Mark

回到 Full GC,从上面简单分析得出,Full GC 发生是没有足够的 free region,如果堆是足够大的,Mixed gc 没有回收足够的 old region,或者 concurrent mark 没法及时完成,都可能会导致 full gc。

GC 日志分析

下面是网上找的一个 GC 日志案例,解析如下(配合 G1 垃圾收集周期结合来看):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[gc,start      ] GC(44265) Pause Young (Normal) (G1 Evacuation Pause)
[gc,task       ] GC(44265) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44265)   Pre Evacuate Collection Set: 0.1ms
[gc,phases     ] GC(44265)   Evacuate Collection Set: 101.8ms
[gc,phases     ] GC(44265)   Post Evacuate Collection Set: 3.2ms
[gc,phases     ] GC(44265)   Other: 2.7ms
[gc,heap       ] GC(44265) Eden regions: 1850->0(1851)
[gc,heap       ] GC(44265) Survivor regions: 70->69(240)
[gc,heap       ] GC(44265) Old regions: 766->768
[gc,heap       ] GC(44265) Humongous regions: 20->19
[gc,metaspace  ] GC(44265) Metaspace: 193280K->193280K(1230848K)
[gc            ] GC(44265) Pause Young (Normal) (G1 Evacuation Pause) 21642M->6843M(25600M) 107.561ms
[gc,cpu        ] GC(44265) User=1.31s Sys=0.00s Real=0.11s

[gc,start      ] GC(44266) Pause Young (Normal) (G1 Evacuation Pause)
[gc,task       ] GC(44266) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44266)   Pre Evacuate Collection Set: 0.1ms
[gc,phases     ] GC(44266)   Evacuate Collection Set: 99.8ms
[gc,phases     ] GC(44266)   Post Evacuate Collection Set: 3.3ms
[gc,phases     ] GC(44266)   Other: 2.7ms
[gc,heap       ] GC(44266) Eden regions: 1851->0(1854)
[gc,heap       ] GC(44266) Survivor regions: 69->66(240)
[gc,heap       ] GC(44266) Old regions: 768->772
[gc,heap       ] GC(44266) Humongous regions: 20->19
[gc,metaspace  ] GC(44266) Metaspace: 193280K->193280K(1230848K)
[gc            ] GC(44266) Pause Young (Normal) (G1 Evacuation Pause) 21659M->6848M(25600M) 105.713ms
[gc,cpu        ] GC(44266) User=1.29s Sys=0.01s Real=0.10s

[gc,start      ] GC(44267) Pause Young (Normal) (G1 Evacuation Pause)
[gc,task       ] GC(44267) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44267)   Pre Evacuate Collection Set: 0.1ms  //初始标记,查找 gc root 
[gc,phases     ] GC(44267)   Evacuate Collection Set: 89.8ms     //并发标记
[gc,phases     ] GC(44267)   Post Evacuate Collection Set: 3.5ms //清理工作
[gc,phases     ] GC(44267)   Other: 2.7ms
[gc,heap       ] GC(44267) Eden regions: 1854->0(1856)
[gc,heap       ] GC(44267) Survivor regions: 66->64(240)
[gc,heap       ] GC(44267) Old regions: 772->775
[gc,heap       ] GC(44267) Humongous regions: 20->19
[gc,metaspace  ] GC(44267) Metaspace: 193280K->193280K(1230848K)
[gc            ] GC(44267) Pause Young (Normal) (G1 Evacuation Pause) 21688M->6859M(25600M) 95.891ms
[gc,cpu        ] GC(44267) User=1.16s Sys=0.00s Real=0.10s

[gc,start      ] GC(44268) Pause Young (Normal) (G1 Evacuation Pause)                 // Young GC
[gc,task       ] GC(44268) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44268)   Pre Evacuate Collection Set: 0.1ms
[gc,phases     ] GC(44268)   Evacuate Collection Set: 100.5ms
[gc,phases     ] GC(44268)   Post Evacuate Collection Set: 3.8ms
[gc,phases     ] GC(44268)   Other: 2.8ms
[gc,heap       ] GC(44268) Eden regions: 1856->0(1855)
[gc,heap       ] GC(44268) Survivor regions: 64->65(240)
[gc,heap       ] GC(44268) Old regions: 775->777
[gc,heap       ] GC(44268) Humongous regions: 20->19
[gc,metaspace  ] GC(44268) Metaspace: 193280K->193280K(1230848K)
[gc            ] GC(44268) Pause Young (Normal) (G1 Evacuation Pause) 21715M->6876M(25600M) 107.037ms
[gc,cpu        ] GC(44268) User=1.30s Sys=0.00s Real=0.11s

[gc,start      ] GC(44269) Pause Young (Concurrent Start) (G1 Humongous Allocation)  // 并发阶段
[gc,task       ] GC(44269) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44269)   Pre Evacuate Collection Set: 0.6ms
[gc,phases     ] GC(44269)   Evacuate Collection Set: 90.9ms
[gc,phases     ] GC(44269)   Post Evacuate Collection Set: 3.2ms
[gc,phases     ] GC(44269)   Other: 2.9ms
[gc,heap       ] GC(44269) Eden regions: 1519->0(1855)
[gc,heap       ] GC(44269) Survivor regions: 65->65(240)
[gc,heap       ] GC(44269) Old regions: 777->777
[gc,heap       ] GC(44269) Humongous regions: 19->19
[gc,metaspace  ] GC(44269) Metaspace: 193280K->193280K(1230848K)
[gc            ] GC(44269) Pause Young (Concurrent Start) (G1 Humongous Allocation) 19024M->6883M(25600M) 97.391ms
[gc,cpu        ] GC(44269) User=1.16s Sys=0.01s Real=0.10s

[gc            ] GC(44270) Concurrent Cycle                                          // 完成 clearup
[gc,marking    ] GC(44270) Concurrent Clear Claimed Marks
[gc,marking    ] GC(44270) Concurrent Clear Claimed Marks 0.562ms
[gc,marking    ] GC(44270) Concurrent Scan Root Regions
[gc,marking    ] GC(44270) Concurrent Scan Root Regions 719.931ms
[gc,marking    ] GC(44270) Concurrent Mark (280799.914s)
[gc,marking    ] GC(44270) Concurrent Mark From Roots
[gc,task       ] GC(44270) Using 3 workers of 3 for marking
[gc,marking    ] GC(44270) Concurrent Mark From Roots 2268.905ms
[gc,marking    ] GC(44270) Concurrent Preclean
[gc,marking    ] GC(44270) Concurrent Preclean 3.078ms
[gc,marking    ] GC(44270) Concurrent Mark (280799.914s, 280802.186s) 2272.068ms
[gc,start      ] GC(44270) Pause Remark
[gc,stringtable] GC(44270) Cleaned string and symbol table, strings: 87967 processed, 92 removed, symbols: 442773 processed, 13 removed
[gc            ] GC(44270) Pause Remark 13740M->13740M(25600M) 32.599ms
[gc,cpu        ] GC(44270) User=0.29s Sys=0.00s Real=0.04s
[gc,marking    ] GC(44270) Concurrent Rebuild Remembered Sets            //重构记忆集
[gc,marking    ] GC(44270) Concurrent Rebuild Remembered Sets 1906.792ms
[gc,start      ] GC(44270) Pause Cleanup
[gc            ] GC(44270) Pause Cleanup 18019M->18019M(25600M) 0.782ms
[gc,cpu        ] GC(44270) User=0.00s Sys=0.01s Real=0.00s
[gc,marking    ] GC(44270) Concurrent Cleanup for Next Mark
[gc,marking    ] GC(44270) Concurrent Cleanup for Next Mark 25.530ms
[gc            ] GC(44270) Concurrent Cycle 4963.833ms

[gc,start      ] GC(44271) Pause Young (Prepare Mixed) (G1 Evacuation Pause)  // Space Reclamation 阶段了,多个 Mixed GC 会进行
[gc,task       ] GC(44271) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44271)   Pre Evacuate Collection Set: 0.1ms
[gc,phases     ] GC(44271)   Evacuate Collection Set: 102.6ms
[gc,phases     ] GC(44271)   Post Evacuate Collection Set: 3.7ms
[gc,phases     ] GC(44271)   Other: 3.9ms
[gc,heap       ] GC(44271) Eden regions: 1855->0(98)
[gc,heap       ] GC(44271) Survivor regions: 65->62(240)
[gc,heap       ] GC(44271) Old regions: 777->778
[gc,heap       ] GC(44271) Humongous regions: 21->19
[gc,metaspace  ] GC(44271) Metaspace: 193271K->193271K(1230848K)
[gc            ] GC(44271) Pause Young (Prepare Mixed) (G1 Evacuation Pause) 21739M->6869M(25600M) 110.034ms
[gc,cpu        ] GC(44271) User=1.32s Sys=0.01s Real=0.10s

[gc,start      ] GC(44272) Pause Young (Mixed) (G1 Evacuation Pause)
[gc,task       ] GC(44272) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44272)   Pre Evacuate Collection Set: 0.4ms
[gc,phases     ] GC(44272)   Evacuate Collection Set: 150.8ms
[gc,phases     ] GC(44272)   Post Evacuate Collection Set: 3.2ms
[gc,phases     ] GC(44272)   Other: 2.3ms
[gc,heap       ] GC(44272) Eden regions: 98->0(149)
[gc,heap       ] GC(44272) Survivor regions: 62->11(20)
[gc,heap       ] GC(44272) Old regions: 778->547
[gc,heap       ] GC(44272) Humongous regions: 19->19
[gc,metaspace  ] GC(44272) Metaspace: 193271K->193271K(1230848K)
[gc            ] GC(44272) Pause Young (Mixed) (G1 Evacuation Pause) 7653M->4605M(25600M) 156.486ms
[gc,cpu        ] GC(44272) User=1.95s Sys=0.01s Real=0.15s
[gc,start      ] GC(44273) Pause Young (Mixed) (G1 Evacuation Pause)
[gc,task       ] GC(44273) Using 13 workers of 13 for evacuation
[gc,phases     ] GC(44273)   Pre Evacuate Collection Set: 0.2ms
[gc,phases     ] GC(44273)   Evacuate Collection Set: 122.9ms
[gc,phases     ] GC(44273)   Post Evacuate Collection Set: 2.0ms
[gc,phases     ] GC(44273)   Other: 3.1ms
[gc,heap       ] GC(44273) Eden regions: 149->0(1900)
[gc,heap       ] GC(44273) Survivor regions: 11->20(20)
[gc,heap       ] GC(44273) Old regions: 547->520
[gc,heap       ] GC(44273) Humongous regions: 19->19
[gc,metaspace  ] GC(44273) Metaspace: 193271K->193271K(1230848K)
[gc            ] GC(44273) Pause Young (Mixed) (G1 Evacuation Pause) 5797M->4468M(25600M) 128.036ms
[gc,cpu        ] GC(44273) User=1.57s Sys=0.01s Real=0.12s

上面是连续几次 GC 的日志,可以对照着 GC 周期来看。

  • GC (44265) 是一次普通的 Young GC里面信息有各种 Region 的变化

这里简单说一下 humongous 对象的处理,humongous 对象在 G1 中是被特殊对待的,G1 只决定它们是否生存,回收他们占用的空间,从不会移动它们。

  • Young-Only 阶段,humongous regions 可能会被回收
  • Space-Reclamation,humongous regions 可能会被回收
  • GC (44269) 开始进入并发阶段
  • GC (44270) 完成了 Cleanup,紧接着一个 Prepare Mixed GC (44271) 的垃圾收集,对应周期虚线右边的蓝实心圆
  • GC (44272) 之后就是 Space Reclamation 阶段了,多个 Mixed GC 会进行

JVM 性能监控工具

我们可以通过以下几种工具辅助分析 JVM 性能瓶颈:

综合组件:

  • VisualVM
  • Glowroot
  • https://arthas.aliyun.com/

thread dump 分析:

  • https://fastthread.io/

gc 日志分析:

  • https://gceasy.io/gc-index.jsp

heap dump 分析:

  • https://www.ibm.com/support/pages/ibm-heapanalyzer
  • https://projects.eclipse.org/projects/tools.mat

参考资料

【GC 停顿预测模型】

  1. http://www.narihiro.info/g1gc-impl-book/scheduling.html
  2. https://sdww2348115.github.io/jvm/g1/PausePredictionModel

【垃圾收集器执行过程】

  1. https://bugs.openjdk.org/browse/JDK-8295118
  2. https://my.oschina.net/u/4273516/blog/4550072

【跨代引用】

  1. https://blog.csdn.net/weixin_47184173/article/details/113627337

【空闲时自动将Java堆内存返回给操作系统】

  1. https://openjdk.org/jeps/346

【其他】

  1. https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/comline.htm#JFRUH197
  2. https://www.redhat.com/en/blog/part-1-introduction-g1-garbage-collector
  3. https://blog.csdn.net/qq_16500963/article/details/132133125
  4. http://cs.williams.edu/~dbarowy/cs334s18/assets/p37-detlefs.pdf
  5. https://tech.meituan.com/2016/09/23/g1.html
  6. https://hllvm-group.iteye.com/group/topic/44381
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发故事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
十问“AI陪伴”:现状、趋势与机会
10年之后,ChatGPT等强AI的出现,似乎让我们依稀看到了“Her”的影子:我们开始有了“AI助手”,有了“AI陪聊”,有了“AI心理咨询”……Character.ai, 星野这类“AI虚拟角色”的APP甚至开始向我们描绘"AI男友/女友"的万花筒,以及在这背后的资本狂欢与崩溃……
小腾资讯君
2024/10/25
2860
万字长文详解:游戏叙事结构和任务编排设计
‍ ‍导语|让玩家感知到叙事的妙趣,产生探索欲延伸是叙事体验的核心。简要聊聊叙事落入游戏生产,使用任务形式的叙事载体,或将赋予叙事于游戏设计层的真正含义。 本文作者:clampwang,腾讯IEG游戏策划 前言 现如今好的叙事结构不仅与玩法有相互促进耦合的作用,也可把控玩家情感,强化游戏沉浸感。在笔者上一篇文章里,已阐述过玩法叙事的制衡平衡重要性,这里便不再赘述。 而在这篇文章中,笔者除了会简单阐述一下游戏叙事结构的基本理论和叙事结构分类的不同设计,还会聊聊叙事如何化作任务的体验形式,能让玩家感知体验并落
腾讯大讲堂
2022/03/29
7.4K0
年轻人不想恋爱,AI会是良药吗?
博主跟ChatGPT互动、聊天、“谈”恋爱,正在成为中外社交媒体平台上新的流量密码,受到大批年轻人追捧和跟风。
小腾资讯君
2024/04/26
2600
为啥年轻人喜欢在游戏中打扫卫生?
#信号解读 前沿玩乐家们安利近期的宝藏作品,解读热点现象和时下趋势,分享又real又pro的乐趣体验。 本文作者:林子涵,腾讯IEG“未来信号空间站”高校研究员 内容来源:银河系洞察基地 把电脑桌面上
腾讯大讲堂
2023/03/23
5460
为啥年轻人喜欢在游戏中打扫卫生?
腾讯云X巨人网络:来《太空杀》当「内鬼」,智斗700万AI
近日,巨人网络旗下社交推理游戏《太空杀》接入腾讯混元Turbo S大模型。2亿注册玩家,在线与超700万AI角色同台竞技——
小腾资讯君
2025/04/28
1890
《AI赋能鸿蒙Next,开启智能关卡设计新时代》
在游戏开发领域,关卡设计是至关重要的一环,它直接影响着玩家的游戏体验和沉浸感。而随着人工智能技术的飞速发展,结合鸿蒙Next系统的强大功能,为游戏的智能关卡设计带来了全新的思路和方法。
程序员阿伟
2025/01/20
1320
《AI赋能鸿蒙Next游戏角色,开启智能行为新时代》
在鸿蒙Next游戏的广阔世界里,人工智能正以前所未有的方式提升游戏角色的智能行为,为玩家带来更加逼真、沉浸和富有挑战性的游戏体验。
程序员阿伟
2025/01/13
1110
《AI赋能鸿蒙Next游戏角色,开启智能行为新时代》
腾讯大模型「整活」,游戏智能NPC「活」了!
《碧优蒂的世界》(下称「BUD」)上新的「AI赛季」里,NPC不再是照剧本走的工具人。他们会顶嘴、记仇、掂量利弊、评估风险——甚至你一句话说错,剧情都能拐弯。
小腾资讯君
2025/05/16
1330
《AI赋能鸿蒙Next,打造极致沉浸感游戏》
在游戏开发领域,鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇,使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。
程序员阿伟
2025/01/20
910
火爆出圈的《黑神话:悟空》,凭什么?
《黑神话:悟空》作为首款国产单机3A游戏,在8月20日正式上线后,迅速在全球范围内引发了巨大的热潮,其火爆的数据和影响力令人瞩目。
内容营销专家刘鑫炜
2024/09/11
1420
AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
随着AI的技术进步和工具普及,尤其是在这两年的跃进之后,AI在游戏行业内的应用已经逐步由理念设想推向落地实践。从蔡浩宇披露的AI新游《Whispers From The Star》到GDC上各大厂家呈现的游戏+AI新亮点,我们看到了更多AI与游戏的结合方式,不仅是制作端AIGC能力的融入,连游戏内互动体验也正因AI的崛起而卷入这场革命。
腾讯云音视频
2025/05/21
2590
AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
死侍在新片中,扮演了一个 AI 驱动的 NPC
来源:HyperAI超神经 本文约2200字,建议阅读5分钟 人工智能让小角色成为了大英雄。 近期上映的电影《失控玩家》讲述了一个普通的游戏 NPC ,因为加入了 AI 技术,将其改造成了一个想要扭转玩家命运、改变游戏的大人物。游戏 AI 的普及,让《失控玩家》中描绘的场景逐渐得以实现。 关键词:游戏AI 强化学习    最近在北美和中国上映了一部以电子游戏为创作背景的电影《Free Guy》(中文片名译作《失控玩家》),由《死侍》的扮演者瑞安·雷诺茨主演。 全片轻松搞笑,特效精致,暑期档里表现亮眼,全球
数据派THU
2023/03/29
5570
死侍在新片中,扮演了一个 AI 驱动的 NPC
新火种AI|游戏黑马《幻兽帕鲁》爆火,AI+游戏将有无限可能
2024年第一个月,一匹游戏黑马就从万千游戏中杀出重围,上线仅4天,就卖出了600万份,最高同时在线201万人,直接登顶,在Steam的历史排行上也能排到第二,仅次于《绝地求生》的325万,并且玩家好评率也达到了93%,不得不说,《幻兽帕鲁》真的是叫好又叫座。
新火种
2024/01/26
1810
新火种AI|游戏黑马《幻兽帕鲁》爆火,AI+游戏将有无限可能
AIGC时代的「数字生命计划」已启动!
即使总是伴随着关于伦理、人性与法律等问题的争论,人类从来没有放弃过挣脱时空限制、实现灵魂永恒的尝试。近几年《上载新生》《万神殿》《爱死机》《西部世界》这些剧作,无不在重温着二十多年前《黑客帝国》和《楚门世界》的内核。
机器之心
2024/01/23
2550
AIGC时代的「数字生命计划」已启动!
元宇宙还缺什么?还没给虚拟化身定制沉浸式声音
新智元报道 编辑:桃子 David 【新智元导读】元宇宙最缺什么?听,你不曾体验过的沉浸式声音。 提起元宇宙,多数人都会都会把焦点放在「看」,看到怎样的虚拟世界。 然而,鲜有人去关心自己会「
新智元
2021/12/21
8580
元宇宙还缺什么?还没给虚拟化身定制沉浸式声音
虚拟世界背景下游戏趋势初探
背景 2022年上半年期间,全球虚拟世界相关的应用已获得1.7亿下载,其中游戏应用下载量高达1.1亿,占比67.3%。虚拟世界的爆发式发展也带来了游戏行业的改变,本文尝试通过对目前比较流行的虚拟世界游戏进行研究,对虚拟世界类游戏类型和特点进行总结,以期窥探未来游戏产业可能的发展方向~ ‍ 一、新的游戏体验 1.1 游戏经济系统由封闭转向开放 目前虚拟世界类游戏中最普遍的就是Play-to-Earn(边玩边赚) 类型的游戏,所谓Play-to-Earn是指通过使用区块链技术,让玩家可以获得游戏内资产的奖励
腾讯ISUX
2023/04/02
5410
虚拟世界背景下游戏趋势初探
十问AI陪伴:机器有情商了吗?
今年以来,随着GPT-4o等大模型的推出,AI不仅能够理解逻辑关系,还能表达复杂的情感,使得人机互动更加便捷和自然。电影《Her》中的情节似乎正在变成现实,AI的情感陪伴功能日益增强,如Character.ai等应用甚至开始探讨“AI伴侣”的概念。这一领域的巨大商业潜力引起了资本市场的极大关注。前不久,谷歌以25亿美元的估值收购了cai的部分股权。
小腾资讯君
2024/11/19
1890
和GPT-4这些大模型玩狼人杀,人类因太蠢被票死,真·反向图灵测试
这是一次「反向图灵测试」,几个全球最先进的大模型坐在一起,坐着火车唱着歌,但其中混进了人类:
机器之心
2024/06/04
1510
和GPT-4这些大模型玩狼人杀,人类因太蠢被票死,真·反向图灵测试
AIGC在游戏开发中的革命性潜力-自动生成内容与智能化NPC
随着游戏行业的快速发展,自动化生成内容(AIGC, Artificial Intelligence Generated Content)在游戏开发中的潜力日益受到关注。通过AIGC,开发者可以借助人工智能来自动生成游戏中的角色、场景、任务等内容,从而大幅减少开发时间,提升游戏的丰富性和玩家的沉浸感。在本文中,我们将探讨AIGC在游戏开发中的应用潜力,并通过代码实例展示如何实现基本的自动生成游戏内容。
一键难忘
2024/10/20
3680
游戏分析法(二):感受资料和内在联系
很多时候我们在研究一款游戏的时候,会停留在之前的“表象资料”阶段:我们搜集了很多这个游戏的数据,也写了评测报告,甚至拆解了游戏的美术资源和关卡数据。但是这些还未够,因为所有的这些内容,最后都会形成玩家的“感受”,我们是有必要连同这些感受一起记录下来,并且分析这些感受是如何形成的。
韩伟
2019/05/17
6790
游戏分析法(二):感受资料和内在联系
推荐阅读
相关推荐
十问“AI陪伴”:现状、趋势与机会
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验