Java 12-GC (JEP 346) 在资源按使用付费的容器环境中行为是否特别不利?

标签 java garbage-collection java-12

这个 JEP 的既定目标是增强 G1 垃圾收集器以在空闲时自动将 Java 堆内存返回给操作系统

由于G1极力避免full GC,只根据Java堆占用和分配 Activity 触发并发循环,所以在很多情况下它不会归还Java堆内存,除非外部强制这样做。

那么这在资源按使用付费的容器环境中是否不利?

谁能澄清一下....

引用:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8204089

最佳答案

如果我没有误解你的话,你似乎是在问在容器化环境中让 GC 回收内存是否不利,因为用户可能没有充分利用内存,因此对资源收费过高。

您提供的链接实际上说明了以下内容:

This behavior is particularly disadvantageous in container environments where resources are paid by use. Even during phases where the VM only uses a fraction of its assigned memory resources due to inactivity, G1 will retain all of the Java heap. This results in customers paying for all resources all the time, and cloud providers [not being able to fully utilize their hardware][4].

If the VM were able to detect phases of Java heap under-utilization ("idle" phases), and automatically reduce its heap usage during that time, both would benefit.

这个 JEP 的设计者似乎相信用户和云提供商都会从回收未使用的内存中获益,并且从上面的说法看来是有道理的。

但是,如果您的程序在定时环境(例如 AWS Lambda)中运行并且它的生命周期很短,您甚至可能想要利用 Epsilon GC,因为它不会回收任何内存,因为这可能会让您受益更多在某些情况下(如果容器将被销毁,为什么还要花费 CPU 周期来回收内存?)。

关于Java 12-GC (JEP 346) 在资源按使用付费的容器环境中行为是否特别不利?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490373/

相关文章:

java - SQLite 古怪的数据库表锁

java - nio上下文中的请求-响应同步/匹配

java - 基本类型的一对一映射,到 Hibernate 中的单个类

Java - 为什么强制垃圾收集不释放内存

java - 在 Docker 中运行 Java 12 应用程序

java - log4j:WARN 在 org.apache.log4j.RollingFileAppender 中没有这样的属性 [rollingPolicy]

android - 如何解决 java.lang.OutOfMemoryError : GC overhead limit exceeded error in android studio

c# - 垃圾回收是如何收集自引用对象的?

gradle - 多模块 gradle 构建中的错误 : module not found: org. lwjgl.natives

java - 是否可以使用 java 12 创建 spring boot maven 项目?