Java:如何使用 JVMTI 的 ForceGargabeCollection 真正强制执行 GC?

2024-01-29

我不是在寻找通常的“你只能使用Java暗示GC系统.gc()”答案,这根本不是这个问题的目的。

我的问题不是主观的,而是基于现实:GCcan在 Java 中是被迫的。我们日常使用的很多程序都这样做:IntelliJ IDEA、NetBeans、VisualVM。

他们都可以forceGC 发生。

它是如何完成的?

我认为他们都在使用 JVMTI,更具体地说强制垃圾回收(注意“力”)但是我怎样才能自己尝试呢?

http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection

另请注意,这个问题不是关于“为什么”我想这样做:“为什么”可能是“好奇心”或“我们正在编写一个类似于 VisualVM 的程序”等。

问题实际上是“如何使用 JVMTI 的 ForceGarbageCollection 强制执行 GC”?

JVM 是否需要使用任何特殊参数启动?

是否需要 JNI?如果是这样,具体是什么代码?

它仅适用于 Sun VM 吗?

任何完整且可编译的示例都将受到欢迎。


NetBeans 至少使用 System.gc():http://hg.netbeans.org/main/annotate/9779f138a9c9/openide.actions/src/org/openide/actions/GarbageCollectAction.java http://hg.netbeans.org/main/annotate/9779f138a9c9/openide.actions/src/org/openide/actions/GarbageCollectAction.java(这是用于显示当前堆并让您启动 GC 的小按钮)。如果您点击该链接,您将看到它们显式运行终结器。如果您有几 GB 的可用磁盘空间,并且想要自己研究代码,可以通过 Mercurial 获得:hg clone http://hg.netbeans.org/main/

据我所知,“System.gc() 只是一个提示”教条源于 JLS 和 JVM 规范的迂腐解释,它允许没有垃圾收集堆的 Java 实现。那,以及不完整的阅读JavaDoc http://java.sun.com/javase/6/docs/api/java/lang/System.html#gc():

调用 gc 方法表明 Java虚拟机花费精力 致力于回收未使用的对象 为了让他们的记忆 目前可快速占用 重复使用。当控制权从 方法调用,Java 虚拟机 已尽最大努力回收 与所有废弃物体的空间。

阅读第二句话:“尽力回收空间”比“提示”强得多。

也就是说,很少有理由打电话System.gc()。向高德纳致歉:

我们应该忘记内存管理,大约 97% 的情况下:显式垃圾回收是万恶之源

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:如何使用 JVMTI 的 ForceGargabeCollection 真正强制执行 GC? 的相关文章

  • 如果计算的哈希码超过整数最大限制,会发生什么?

    这是 Java HashTable 类的 hashCode 实现 如果哈希表中的元素数量很大并且哈希码超过 INTEGER MAX LIMIT 2 147 483 648 到 2 147 483 647 该怎么办 我假设 hashCodes
  • 从文件中读取文本并将每行中的每个单词存储到单独的变量中

    我有一个包含以下内容的 txt 文件 1 1111 47 2 2222 92 3 3333 81 我想逐行读取并将每个单词存储到不同的变量中 例如 当我读取第一行 1 1111 47 时 我想将第一个单词 1 存储到var 1 1111 进
  • cucumber.json 报告被重新运行场景报告覆盖

    我有一个具有相同技术堆栈 JAVA1 8 Cucumber JVM JUnit Maven 的 UI 测试项目和一个 API 测试项目 这两个项目都向我展示了这个问题 可能是因为两者都存在相同的依赖关系集 我使用了使用 maven sure
  • Mockito 匹配器和基元数组

    有了 Mockito 我想verify 方法调用byte 在它的参数列表中 但我没有找到如何写这个 myMethod byte 我只想要类似的东西anyByteArray 如何使用 Mockito 做到这一点 我会尝试any byte cl
  • 在 Java 中重新抛出异常而不丢失堆栈跟踪

    在 C 中 我可以使用throw 语句重新抛出异常 同时保留堆栈跟踪 try catch Exception e if e is FooException throw Java中有没有类似的东西 不会丢失原始堆栈跟踪 catch Whate
  • Eclipse JAVA工具jar不存在

    The archive C Java jdk1 6 0 26 32 lib tools jar which is referenced by the classpath does not exist 这是我运行Tomcat时遇到的错误 清理
  • 用Java截取网页的屏幕截图[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个免费的工具可以读取给定的网页并截取它的屏幕截图 我使用 VirtualFramebuffer 和 Firefox Binary
  • 为什么需要添加工件 JSR305 才能使用 Guava 14+?

    在stackoverflow上查找信息时 我看到了一个与我类似的问题 但没有真正的答案here https stackoverflow com questions 3800033 guava r07 gwt and javax annota
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和
  • 如何在Netbeans中自定义jTable标题列字体大小?

    我尝试改变jtable标题字体大小Netbeans 但还不能 无论如何 表行字体大小已成功更改 这是我使用的方法 更改后的输出 问题 标题字体大小未更改 但我也想改变这一点 所以请帮助我该怎么做 一种方法是使用UIManager并替换默认的
  • 要导入什么才能使用@SuppressFBWarnings?

    要使用 SuppressFBWarnings 需要导入什么 我通过帮助 安装新软件安装了 findbugs 插件 当我输入 import edu 时 我无法按 ctrl space 来获取选项 Example try String t nu
  • ImageIO read() 和 write() 操作后 GIF 图像变得错误

    我有这个代码 它只是读取 GIF 文件 用背景重新绘制它 然后输出到新的 GIF 文件 问题是结果文件变得奇怪 我不知道为什么它的质量变得很差 JPG 文件不会出现此问题 如何修复它 import java awt Color import
  • Java Swing 组件的命名约定(前缀)

    在 Java 中使用 Swing 进行编程时 我想到的一个问题是 它是 Swing 组件的推荐还是 官方 最常用的命名约定 前缀 例如 尽管其他人可能更喜欢其他命名约定 但这就是我当前正在使用的 JTextField 的 txt JButt
  • Java JDT 解析器。获取VariableDeclarationFragment的变量类型

    我一直在用 JDT 实现 Java 解析器 但我不知道当变量的节点类型为变量声明片段 我只有在涉及到时才发现如何获取变量类型变量声明 我的代码如下 public boolean visit VariableDeclarationFragme
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • 通过命令行增加Java中的MaxPermSize内存

    您能否解释一下如何增加此 PermSpace 大小 我正在使用 Gate 应用程序并加载大量数据和大量插件 不幸的是每次运行后都会出现有关内存不足 maxPermSpace 的错误 我到处搜索 但我找不到如何通过命令行增加这个大小 或者可能
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 术语“可序列化”是什么意思? [复制]

    这个问题在这里已经有答案了 不太确定我读过的定义可序列化实际上做了什么 import java io Serializable import java text StringCharacterIterator import java uti
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些

随机推荐

  • 在分发包中使用 virtualenv 部署 Django?

    我必须将 Django 应用程序部署到 SuSE Linux Enterprise 11 系统上 公司规则规定我只需要使用 RPM 进行部署 虽然我可以使用 setup py bdist rpm对于每个依赖项 这并不是真正明智的 因为 RP
  • MongoDB php $in 和 $regex

    我正在尝试结合 regex 和 in 来进行简单的搜索 例如我有一个这样的用户查询 user query for focus red 在我的每个文档的 mongodb 集合中 我都有一个关键字字段 我想获取字段关键字所在的文档 keywor
  • 二进制序列化 - 在 scala 2.10 上替换 Marshal

    由于 scala util Marshal 已弃用 如何将旧代码迁移到 scala 2 10 object Serilaizer def objectToBytes T foo T implicit expected ClassManife
  • 模块上的 __getattr__

    如何实现相当于 getattr 在一个类上 在一个模块上 Example 当调用模块的静态定义属性中不存在的函数时 我希望在该模块中创建类的实例 并使用与模块上的属性查找失败相同的名称调用其方法 class A object def sal
  • 1 台设备上的多个推送通知 - iPhone

    如何在一台设备上处理多个推送通知 例如 用户收到一条通知 称您有 1 条来自我的应用的新消息 在他检查该消息之前 另一条消息进来 所以现在他有 2 条消息 好吧 我不希望 2 条消息堆叠在通知栏中 我想要 1 条通知 表示有 2 条消息正在
  • HighCharts 系列 Z 指数

    有没有办法在不颠倒系列顺序的情况下将系列置于 Highcharts 的前面 在我的代码中 我使用了 graf 1 highcharts chart zoomType xy Highcharts 有一个zIndex http api high
  • 如何使用同一个记录器将不同级别的日志记录到控制台+日志文件?

    我有一个 log4j 记录器 当前将日志写入控制台和文件 工作正常 稍后我想将其配置为将 INFO ERROR 记录到日志文件中 但仅在控制台上显示 ERROR 为了实现这个目标我需要改变什么 log4j rootLogger INFO c
  • 关于使用 Java Swing 循环动态加载图像的问题

    public String imagesArray Images firstImage Images secondImage String imagesPath testproject images for int i 0 i
  • 如何查找哪些文件自提交后没有更改?

    在 git 中 如何找出目录中的哪些文件自某个提交以来没有更改 IMO 生成列表的更简单方法是使用以下命令链 git ls files full name grep v git diff name only
  • PHP 删除特定网站的链接但保留文本

    例如 a href http msdn microsoft com art029nr remove links to here but keep text a but a href http herpyderp com leave all
  • 如何终止 PHP 会话?

    这个一般性的话题之前已经出现过 here https stackoverflow com questions 252907 why does session start cause a timeout when one script cal
  • 如何设置 DataGridViewTextBoxColumn 的密码属性

    我用过DataGridView实现用户名密码 UI 密码显示在DataGridViewTextBoxColumn类型列 我如何使用现有的代码DataGridViewTextBoxColumn并为文本实现密码属性 处理EditingContr
  • 每次本地文件更改时使用 Flask SocketIO 更新网页

    每次我的本地文件 文件名更改时 我都需要更新我的网页 在不使用套接字的情况下 我只需每 1 秒刷新一次页面即可完成 我是通过读取文件名的内容并将其发送到我的网页模板来完成此操作的 但我需要使用套接字并使该过程异步 以便不使用自动刷新 我使用
  • 文档就绪时触发弹出窗口或 div id

    我需要帮助在页面加载时触发弹出窗口 目前 当我单击 你好 链接时 弹出窗口将打开 预期结果 弹出窗口应该打开 无需单击超链接或弹出窗口文件准备好 HTML a class button2 href popup1 hello a div cl
  • 如何增加R中max.print的限制

    我正在使用GraphR 中的包 用于 5461 个项目的 maxclique 分析 我得到的最终输出项非常长 因此我收到以下警告 reached getOption max print 省略 475569 行 有人可以向我提供有关如何增加限
  • 渴望加载关联但限制回报

    这似乎是一个简单的查询 但我就是无法确定 基本上 它可以归结为具有帖子的类别这一古老的概念 预期的关联已就位 一个类别有多个帖子 而一个帖子属于一个类别 我想检索所有类别及其帖子 但将帖子数量限制为 10 个 有任何想法吗 这不是您可以使用
  • iBooks 是如何做到这一点的?

    我目前正在 uiwebview 中显示文本 但是 我想允许用户选择文本并使用所选文本执行某些操作 谷歌搜索 苹果公司已经在 iBooks 上做了类似的事情 当您单击某个单词时 您可以选择在字典中查找该单词 我怎样才能用 Webview 做同
  • 如果离线,使用 Picasso 从磁盘缓存加载图像

    应用程序启动时 我从不同的网站下载了一些图像 方法如下 Picasso with context load image url fetch 现在 假设用户关闭应用程序并离线 当应用程序再次启动时 Picasso 以这种方式显示图像 Pica
  • 当委托不是 UIViewController 时,不会调用 UIImagePickerControllerDelegate 方法

    我有一个包含多个图像的视图 每个图像都旨在从设备的照片库中选择 我遵循了一个例子食物追踪器教程 https developer apple com library ios referencelibrary GettingStarted De
  • Java:如何使用 JVMTI 的 ForceGargabeCollection 真正强制执行 GC?

    我不是在寻找通常的 你只能使用Java暗示GC系统 gc 答案 这根本不是这个问题的目的 我的问题不是主观的 而是基于现实 GCcan在 Java 中是被迫的 我们日常使用的很多程序都这样做 IntelliJ IDEA NetBeans V