文章插图
随着堆利用率接近 100% 并且不可避免的 OutOfMemoryError 可能导致生产 JVM 崩溃 , 倾向于实时 JAVA 应用程序的 DevOps 专业人员不会要求一种机制来强制 Java 垃圾收集并释放几兆字节的内存 。
不幸的是 , 这种立即释放内存的愿望肯定是徒劳的 , 因为在 Java 中没有办法强制进行垃圾收集 (GC) 。但是 , 这里有五种策略可以让 Java 虚拟机 ( JVM ) 确定任务的优先级 。
1. 调用System.gc()开发人员可以在其代码中的任何位置调用 System.gc() 来指示 JVM 优先考虑垃圾收集 。当开发人员调用此方法时——JVM 上没有极端负载——Java GC 循环将在几秒钟内发生 。
System.gc();
2.调用Runtime.getRuntime().gc()另一种选择是使用Runtime.getRuntime().gc()调用 。这是JDK为想要强制进行 Java 垃圾收集的开发人员提供的第二个功能 。Runtime.getRuntime().gc()调用实际上只是在后台调用方法System.gc ( )。结果 , 这两个方法调用是完全一样的 。
Runtime.getRuntime().gc();
3.使用jmap强制GCJava 内存映射 (JMAP) 实用程序有一个打印 Java 堆直方图的方法 。jmap命令的一个副作用是 , 当它被调用时 , 它会强制执行垃圾收集例程 。但是 , 这并不是强制进行 Java 垃圾收集的万无一失的方法 。如果 JVM 很忙并且无法执行 GC 循环 , 则该命令将出错 。
【强制 Java 垃圾回收的 5 种方法】$ jmap -histo:live 7544
Figure 1 您可以尝试使用 JDK 的 JMAP 和 JCMD 实用程序强制执行 Java 垃圾收集 。
4. 使用jcmd的命令行 Java GCJava 诊断命令 (JCMD) 是另一个JDK 实用程序 , 如果 JVM 可以安全地安排 stop-the-world 暂停 , 它将触发垃圾收集例程 。如果不是 , 此命令将以与jmap实用程序相同的方式出错 。
$ jcmd 7544 GC.run
5. 使用 JConsole 或 Java Mission ControlJConsole 和 Java Mission Control 都提供了与 Java 诊断命令实用程序交互的用户友好界面 , 可用于强制执行 Java 垃圾收集 。JConsole监控工具在其内存管理页面上提供了一个按钮 , 上面写着
推荐阅读
- 台风过后男子家中下水道喷垃圾
- 古着jk制服是洋垃圾吗 现在淘宝还在卖古着洋垃圾吗
- 张一鸣回应TikTok强制出售-抖音国际版在美国将何去何从
- 起底杭州失联女子丈夫-警方:失踪女子丈夫被采取强制措施
- 如何清理脸部毛孔垃圾
- 警方:失踪女子丈夫被采取强制措施-杭州女子失踪案后续
- 介绍垃圾分类的重要性和我们如何正确做好垃圾分类,垃圾分类有什么重要性-
- 微软|固态盘欲成升级强制要求!Windows 11 22H2准备就绪 注册表显端倪
- 不可降解塑料袋属于什么垃圾
- 五种垃圾男人,什么叫垃圾男人八大特征-