垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器
垃圾收集算法,垃圾收集器
StackOverflow問題查找正在運行哪種類型的垃圾收集 器,jvm的默認垃圾收集器 , 如何通過查看gc日志來查看正在運行的垃圾收集器? ,以及如何知道HotSpot jvm的當前GC策略? 以及博客文章如何以編程方式獲取GC信息表明了人們有時希望知道Java應用程序使用了哪個Java垃圾收集器。 在本文中,我將介紹確定與Oracle HotSpot VM中運行的Java應用程序相關聯的垃圾收集器的一些最簡單,最常見的方法。
出于演示目的,我將運行一個簡單的Java應用程序。 該應用程序的代碼對于演示如何確定適用的垃圾收集器并不重要。 可以使用命令java -cp stringInstantiationsDemo.jar dustin.examples.demo.IndefiniteRun運行簡單的Java應用程序。 請注意,對于要使用的垃圾收集器,沒有JVM標志的規范。 這意味著JVM將使用按人體工程學選擇的垃圾收集器。
確定所選垃圾收集器的一種簡單方法是使用-XX:+ PrintCommandLineFlags標志 (我在博客文章JavaOne 2011:HotSpot Performance命令行選項的權威集)中寫道。 可以在命令java -XX:+PrintCommandLineFlags -cp stringInstantiationsDemo.jar dustin.examples.demo.IndefiniteRun使用此標志,如以下屏幕快照所示:
如最后一個屏幕快照所示,使用-XX:+PrintCommandLineFlags演示了-XX:+UseParallelGC標志的存在,該標志指示在這種情況下自動使用的收集器是并行收集器 (也稱為吞吐量收集器)。
使用-XX:+PrintCommandLineFlags可以使我們看到在啟動新的Java應用程序時按人體工程學選擇的垃圾收集器運行良好。 當我們想看到已經在運行的Java進程使用的垃圾收集器時, jcmd會派上用場(我在jcmd文章中介紹了這個有用的工具:一個JDK命令行工具來統治他們 )。 在下一個屏幕快照中jcmd進行了說明,該屏幕快照演示了如何使用jcmd查看已經運行的Java應用程序的JVM命令行標志。
從上一個圖像中,我們看到可以使用jcmd <pid> VM.flags標識將指示正在使用的垃圾收集器的虛擬機標志。 在這種情況下,我們再次看到-XX:+UseParallelGC的存在,指示并行/吞吐量垃圾收集器的使用。
我只是演示了如何使用jcmd查看隱式JVM參數,該參數告訴我們在未明確指定垃圾收集器時為特定應用程序的VM自動選擇了哪個垃圾收集器。 下兩個圖像顯示JConsole和VisualVM不顯示隱式JVM參數,因此不顯示未指定時自動使用的垃圾收集器。
盡管JConsole和VisualVM均未顯示隱式Java虛擬機參數(例如隱式選擇的垃圾收集器),但仍可以使用兩種工具通過對象類型為java.lang:type=GarbageCollector JMX和GarbageCollectorMXBean來確定使用中的垃圾收集器。 對于本文到目前為止使用的簡單應用程序,它將是java.lang:type=GarbageCollector,name=PS MarkSweep因為這是并行或吞吐量收集器。 接下來的兩個屏幕快照中的JConsole和VisualVM (通過MBeans插件 )對此進行了演示。
以上示例演示了確定三種垃圾收集器適用的三種基本方法。 下表針對先前演示的并行/吞吐量收集器以及其他兩個主要的Oracle HotSpot JVM收集器( CMS和G1 )總結了這些內容。 下表顯示了確定上述一種方法(在命令行, jcmd或JMX MXBean上明確指定)使用哪個收集器(并行,CMS或G1)時要查找的內容。
| -XX:+UseParallelOldGC -XX:+UseParallelGC | PS MarkSweep PS清除 | |
| -XX:+UseConcMarkSweepGC | 并發標記掃描 | |
| -XX:+ UseG1GC | G1老一代 G1青年一代 | |
盡管未在此處顯示,但從VisualVM或JConsole確定正在使用哪個收集器的另一種方法是使用 DiagnosticCommandMBean 來查找 VM.flags ,其方式與 jcmd 提供VM標志的 方式相同, 如上所述。 在《 在JConsole和VisualVM中查看DiagnosticCommandMBean》 一文中,我已經寫了使用 DiagnosticCommandMBean 完成 jcmd 行為的 博客 。
JVM通常會阻止提供兩個不同的垃圾收集器標志。 如果在一次嘗試啟動Java應用程序的過程中存在兩個,則將顯示類似“選項列表中的收集器組合沖突”的消息,并且Java進程將不會啟動。 因此,只需要為與正在運行的Java應用程序關聯的特定收集器標識一個標志,即可知道正在使用哪個收集器。 這篇文章演示了多種簡單的方法,可用于確定在給定應用程序的JVM中應用了哪個HotSpot垃圾收集器。
翻譯自: https://www.javacodegeeks.com/2016/04/determining-active-hotspot-garbage-collector.html
垃圾收集算法,垃圾收集器
總結
以上是生活随笔為你收集整理的垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单选按钮:after_选择的按钮:将To
- 下一篇: jboss war包放哪_如何将JBos