”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Java EpsilonGC 查看内存分配。

使用 Java EpsilonGC 查看内存分配。

发布于2024-11-08
浏览:107

Using Java EpsilonGC to look at memory allocation.

本文引用的代码源自 Oracle 博客上有关 Epsilon GC 的示例代码。

在本文中,我们探讨了 Java 垃圾收集 (GC) 中一个特别有趣的选项,称为 Epsilon GC。这种垃圾收集算法以其显着特征而著称:它不执行垃圾收集。 Epsilon 垃圾收集器 (GC) 包含在 JDK 11 中。

但是如果垃圾收集器不收集,它有什么用呢? (不劳而获啊!!)

不,它实际上非常有用,Oracle 博客提供的这样一个用例,我对其进行了稍微增强以使其更有帮助。

更多详情请参考原博文:
https://blogs.oracle.com/javamagazine/post/epsilon-the-jdks-do-nothing-garbage-collector

用例:Epsilon GC 对于需要在不借助分析工具的情况下评估特定代码段的内存分配的开发人员来说是有益的。

主要挑战传统的垃圾收集器可以通过不断清除对象来掩盖准确的内存使用指标。这种干扰使得很难确定代码的真实内存消耗。

Epsilon GC 通过充当非收集器来解决此问题。虽然它本身不是垃圾收集算法,但它通过避免执行任何垃圾收集来充当理解内存分配的工具,从而提供内存使用情况的清晰图片。

注意:需要注意的是,由于 Epsilon GC 不会回收内存,因此过多的分配可能会导致 JVM 中出现 OutOfMemoryError (OOM)。

下面是用于演示 Epsilon GC 功效的示例代码:

public class EpsilonDemo {

    public static String formatSize(long v) {
        if (v 



期待
该代码分配 80MB 的字节类型对象。当我们执行代码时,我们应该能够通过打印语句观察到相同的情况。

现在运行带/不带 EpsilonGC 的编译版本:

  1. 使用 G1GC 运行:
java -Xms100m -Xmx100m -XX: UseG1GC  EpsilonDemo
Starting allocations...
*** Free MEM = 102.2 MB
Completed successfully
*** Free MEM = 74.2 MB

因此,通过 G1GC,我们看到了 28 MB 利用率的错误分配图

  1. 使用 EpsilonGC 运行:
java -Xms100m -Xmx100m -XX: UnlockExperimentalVMOptions -XX: UseEpsilonGC EpsilonDemo
[0.004s][warning][gc,init] Consider enabling -XX: AlwaysPreTouch to avoid memory commit hiccups
Starting allocations...
*** Free MEM = 99.4 MB
Completed successfully
*** Free MEM = 18.7 MB 

这里可以清楚地看到80.7 MB的利用率

我希望这可以帮助您了解 EpsilonGC 如何非常方便地发现代码中的内存使用模式。干杯! ?

版本声明 本文转载于:https://dev.to/vishalendu/using-java-episilongc-to-look-at-memory-allocation-50bi?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-23
  • 哪种 PHP XML 解析器最适合我的项目?
    哪种 PHP XML 解析器最适合我的项目?
    为 PHP 选择最佳 XML 解析器虽然内置 XML 解析器已经达到其目的,但开发人员经常寻求替代方案简化的体验。本文将深入探讨 SimpleXML 与 XML Parser 相比的优点和缺点,并探讨其他可用选项。SimpleXML:最佳选择?SimpleXML 成为强大的解决方案由于其扩展性质,提...
    编程 发布于2024-12-23
  • 如何动态更新和显示从 Flask 视图流式传输的数据?
    如何动态更新和显示从 Flask 视图流式传输的数据?
    显示更新时从 Flask 视图流式传输的数据简介在 Flask 应用程序中,通常需要显示实时生成或更新的数据。虽然 Flask 内置了对流响应的支持,但将此数据合并到 HTML 模板中可能具有挑战性。本文探讨了如何在数据流式传输到页面时动态更新、格式化和显示数据。在 Flask 中流式传输数据要在 ...
    编程 发布于2024-12-23
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-23
  • Java 编译出现“Code Too Large”错误如何解决?
    Java 编译出现“Code Too Large”错误如何解决?
    了解 Java 中的“代码太大”编译错误Java 对可编译为字节码的代码大小强制实施限制。超出此限制,您可能会遇到“代码太大”编译错误。当方法变得过大,超过允许的最大大小时,就会出现此问题。在您的例子中,您的函数包含大量为数组赋值的行。克服错误为了解决此错误,Java 引入了一个特定的限制:类中的单...
    编程 发布于2024-12-23
  • 如何使 DIV 元素充当可点击链接,同时保持 XHTML 1.1 合规性?
    如何使 DIV 元素充当可点击链接,同时保持 XHTML 1.1 合规性?
    如何将 DIV 制作为可点击链接(符合 XHTML)用户经常面临在优雅的设计元素中集成可点击链接的困境就像 DIV 块一样,而不损害内容的美观完整性。标准 HTML 标记限制在 DIV 中直接嵌套锚标记 (A),这给创建此类链接带来了挑战。然而,存在一个符合 XHTML 1.1 规范的解决方案。该技...
    编程 发布于2024-12-23
  • 如何离线安装Python包?
    如何离线安装Python包?
    Python 的离线包安装在 Python 编程领域,安装包是一项基本任务,但是如果您需要在没有安装包的机器上安装包怎么办?互联网连接?本指南将为这个常见问题提供解决方案。离线安装最佳实践要下载Python包beserta及其依赖项以进行离线安装,建议执行以下步骤: 准备: 在可访问 Interne...
    编程 发布于2024-12-23
  • 如何信任所有应用程序的 Java 密钥库中的自签名证书?
    如何信任所有应用程序的 Java 密钥库中的自签名证书?
    为所有应用程序信任 Java 密钥库中的自签名证书要建立受信任的 TLS 连接,将自签名证书导入到Java 的密钥库。通常,这是通过命令行实用程序 keytool 实现的。但是,如果目标是在所有 Java 应用程序中提供普遍信任,则需要采用替代方法。在 Windows 上:使用Portecle:安装...
    编程 发布于2024-12-23
  • 我可以仅使用 CSS 来修复元素在 X 轴上的位置吗?
    我可以仅使用 CSS 来修复元素在 X 轴上的位置吗?
    仅在 CSS 中固定 X 轴位置设计网页布局时,通常希望将元素固定在特定轴上,而仍然允许在其他方向滚动。一种常见的情况是在 x 轴上固定一个元素,以便在用户垂直滚动时它保持在水平位置。这可能吗?是的,仅使用CSS就可以固定x轴上的位置。如何实现实现为此,请按照下列步骤操作:将元素的位置设置为“绝对”...
    编程 发布于2024-12-23
  • 没有显式设置 CSS 高度时如何获取 Div 的高度?
    没有显式设置 CSS 高度时如何获取 Div 的高度?
    在没有显式 CSS 规则的情况下确定 Div 高度如果 CSS 中没有显式设置高度,则获取 div 的高度可能会很困难。虽然 .height() jQuery 方法通常用于此目的,但它需要现有的 CSS 规则才能实现正确的功能。这是另一种方法:jQuery 高度函数jQuery 提供了一系列高度函数...
    编程 发布于2024-12-23
  • Golang的`atomic.LoadInt32/StoreInt32(64)`函数如何保证并发编程中的数据完整性?
    Golang的`atomic.LoadInt32/StoreInt32(64)`函数如何保证并发编程中的数据完整性?
    理解golang原子LoadInt32/StoreInt32的用法(64)原子操作在并发编程中起着至关重要的作用,保证多个goroutines之间共享数据的完整性。 sync/atomic 包提供专门用于操作 32 位和 64 位整数的原子加载和存储操作。原子操作的目的与常规加载和存储不同,不能保证...
    编程 发布于2024-12-23
  • MySQL 连接错误 2002:我的主机名不正确吗?
    MySQL 连接错误 2002:我的主机名不正确吗?
    MySQL 连接不工作:寻址主机名当尝试通过 PHP 建立 MySQL 连接时,您可能会遇到错误“没有这样的文件”或目录”(错误代码 2002)。此错误通常表明 MySQL 无法找到指定的文件或路径。此错误的一个潜在原因是连接到 MySQL 时指定的主机名不正确。可以使用主机的 IP 地址(例如 1...
    编程 发布于2024-12-23
  • 如何在 Python 中优化海龟动画速度:为什么 ontimer() 胜过 True 和 Sleep()?
    如何在 Python 中优化海龟动画速度:为什么 ontimer() 胜过 True 和 Sleep()?
    Python 中的海龟动画性能优化专业人士经常会遇到海龟动画执行速度不理想的情况。虽然 tracer() 方法并在其中尝试各种数字可能看起来不够,但一个简单而有效的解决方案就在别处。要使用 Turtle 实现正常的动画速度,避免依赖 while True: 或sleep() 在事件驱动的环境中构建。...
    编程 发布于2024-12-23
  • 为任何中型线程创建 RSS 源!
    为任何中型线程创建 RSS 源!
    周末,我正在浏览 30 分钟内完成的项目创意,以便快速复习,并偶然发现了 codementor.io 那么,RSS Feed 到底是什么? RSS 代表“真正简单的联合” — 它是一种通过 XML 文件访问网站元数据的方法。 例如,Medium 上有大量的文章和出版物,将所有带有摘要的链接都放在一个...
    编程 发布于2024-12-23
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3