hyengine垃圾回收问题之过程卡顿如何解决

简介: hyengine垃圾回收问题之过程卡顿如何解决

问题一:hygc 相较于 quickjs 原生 gc 有哪些改进和优势?


hygc 相较于 quickjs 原生 gc 有哪些改进和优势?


参考回答:

hygc 相较于 quickjs 原生 gc,在设计和实现上进行了多项改进。首先,它参考了 v8 等先进引擎的 gc 设计思路,旨在实现一套适用于移动端业务的轻量级、高性能、实现简单的 gc。其次,hygc 采用了多线程三色 gc 方案,以尽可能减少 gc 暂停时间并降低 js 执行耗时。此外,hygc 未引入分代支持,因为在实际业务 case 测试中发现内存使用量并不大。这些改进使得 hygc 在减少 gc 耗时和内存碎片化方面表现更优,同时减少了 jit 生成的代码中引用计数操作的指令数量,降低了代码体积。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666234



问题二:hygc 如何确保垃圾回收过程中的业务体验不出现卡顿?


hygc 如何确保垃圾回收过程中的业务体验不出现卡顿?


参考回答:

为了确保垃圾回收过程中的业务体验不出现卡顿,hygc 严格控制了 gc 的暂停时间。具体来说,它将 gc 的暂停时间控制在 30ms 内,这是通过多线程三色 gc 方案实现的。该方案能够在多线程环境下高效地进行垃圾回收,同时减少了对主线程执行的影响,从而保证了业务逻辑的流畅运行。此外,hygc 还可以根据实际业务需求和设备性能进行参数调整,以进一步优化 gc 性能。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666235



问题三:hygc 计划提供哪几种业务策略来满足不同使用场景的性能需求?


hygc 计划提供哪几种业务策略来满足不同使用场景的性能需求?


参考回答:

hygc 计划提供三种业务策略以满足不同使用场景的性能需求,包括无 gc、闲时 gc 和默认 gc。无 gc 策略在运行期不触发 gc 操作,仅在代码完全运行完毕销毁 runtime 时做一次 full gc。闲时 gc 策略同样在运行期不触发 gc,但在代码运行结束后在异步线程进行 gc。默认 gc 策略则会在运行期触发 gc。业务可以根据实际需求选择 gc 策略,并建议设置 gc 策略开关以避免非预期结果。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666236



问题四:hygc 的多线程三色标记 gc 相较于单线程版本有哪些改进?


hygc 的多线程三色标记 gc 相较于单线程版本有哪些改进?


参考回答:

hygc 的多线程三色标记 gc 相较于单线程版本,主要改进在于减少了 js 线程在 gc 过程中的暂停时间,降低了业务卡顿的风险。在多线程版本中,js 线程负责根对象收集及老对象转移到异步 gc 链表,然后继续执行,而 gc 线程则负责老对象的标记和垃圾收集。此外,为了兼容 hymalloc 的非线程安全性,垃圾对象的释放被拆分为两个阶段,分别在 gc 线程和 js 线程中执行。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666237



问题五:hygc 的异步线程 gc 在处理新对象时存在什么局限性?


hygc 的异步线程 gc 在处理新对象时存在什么局限性?


参考回答:

hygc 的异步线程 gc 在处理新对象时存在一个局限性,即完成老对象转移后的新对象将不会参与当前轮次的 gc。这可能会导致内存使用峰值的提升,提升程度与 gc 线程的执行耗时相关。为了解决这个问题,后续将根据实际情况评估是否进行方案优化。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666238

相关文章
|
3月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
211 4
Android性能测试——发现和定位内存泄露和卡顿
|
4月前
|
JavaScript Java 开发工具
Electron V8排查问题之接近堆内存限制的处理如何解决
Electron V8排查问题之接近堆内存限制的处理如何解决
282 1
|
4月前
|
JavaScript
hyengine 编译问题之性能优化瓶颈如何解决
hyengine 编译问题之性能优化瓶颈如何解决
|
4月前
|
缓存
hyengine内存分配问题之内存浪费如何解决
hyengine内存分配问题之内存浪费如何解决
|
4月前
|
存储
hyengine 优化问题之代码耗时如何解决
hyengine 优化问题之代码耗时如何解决
|
4月前
|
Java 测试技术
hyengine microbench测试问题之提升jit优化如何解决
hyengine microbench测试问题之提升jit优化如何解决
|
4月前
|
存储
hyengine 编译问题之性能差距如何解决
hyengine 编译问题之性能差距如何解决
|
缓存 Java 程序员
如何写出高性能代码(三)优化内存回收(GC)
可复用性在这里指的是,大多数的对象都是可以被复用的,这些可以被复用的对象就没必要每次都新建出来,浪费内存空间了。 处了巧用数据特性 中的例子,我这里再个Java中已经被用到的例子,这个还得从一段奇怪的代码说起。
70 0
|
SQL canal 运维
JVM第六讲:线上环境 FGC 频繁,如何解决?
JVM第六讲:线上环境 FGC 频繁,如何解决?
301 0
|
缓存 算法 Java
透彻理解JVM中垃圾回收GC生产参数,停顿时间+执行效率相关参数
停顿时间相关参数 部分垃圾回收器实现了GC执行时应用最大停顿时间的功能,所以提供参数用于应用控制停顿时间。另外,GC为了满足停顿时间,会设计和实现一些动态算法来调整堆空间,从而满足停顿时间这个目标。本节介绍相关参数。 该参数表示GC的最大的停顿时间。不同GC对于该参数的行为不一致,具体来说: 1)若Parallel GC中GC执行的时间超过该值,将导致调整新生代和老生代的大小(参数UseAdaptiveSizePolicy设置为true)。参数的默认值为4294 967 295,大约为50天(所以通常不会触发这个调整策略)。 2)若G1中GC执行的时间超过该值,将导致调整新生代的大小和