草庐IT

gc_probability

全部标签

java - 为什么在使用 G1 GC 时推荐使用 Java 10?

Java10通过迭代改进其现有算法来减少FullGC暂停时间。-XX:ParallelGCThreads据我了解,G1不会与我们的应用程序同时运行其收集周期。它仍然会定期暂停应用程序,并且FullGC暂停会随着堆大小的增加而增加。那它是如何提高性能的呢?谁能解释一下? 最佳答案 因为直到Java10,G1GC才在stop-the-worldfullGC周期中完全并行。根据JEP307:ParallelFullGCforG1这改善了最坏情况下的延迟:TheG1garbagecollectorisdesignedtoavoidfullc

java - 空无限循环和 GC (JVM)。请说明效果

我的空无限循环publicstaticvoidmain(String[]args){while(true){}}并在JavaVisualVM中进行分析(图片)如您所见,我不创建对象。为什么要换一个堆?请解释一下效果。为什么? 最佳答案 基本上任何Java应用程序都是多线程的,您的主线程不分配内存这一事实并不意味着其他线程也不分配。事实上,很可能通过VisualVM附加并显示GC选项卡,您在VM中生成了一些线程来监视GC资源并为VisualVM提供成为那些Shiny图表的指标。而且该监控可能会分配一些自己的资源来完成它的工作。

java - 我可以启动一个 Eden 空间如此之大的 JVM,它运行到完成而没有任何 GC。假设我有一堆空闲内存

如果我有足够的空闲内存,我可以启动一个Java应用程序(说mMven)来单独使用Eden空间运行直到完成而不需要任何GC吗? 最佳答案 是的,我已经为Java6+中的实际应用程序完成了此操作。我从一个24GB的Eden空间、微型幸存者空间和永久空间开始。后来发现8GB绰绰有余。当有bug或错误时它仍然会GC,但在正常操作下不会。我相信选项是-Xmn24g-Xmx26g-XX:SurvivorRatio=100使用默认GC。该应用程序经过优化,生成的数据量低于1GB/小时,因此使用GC运行一天。

java - 内存泄漏在 MAT 中显示为 GC root : Native Stack

我有一些我运行的第三个库代码,一段时间后我遇到了OutOfMemoryError。所以我启动了EclipseMAT并分析了内存。现在似乎无法释放内存,因为有一个对象显示为GCroot:NativeStack。阅读documentation:Inoroutparametersinnativecode,suchasuserdefinedJNIcodeorJVMinternalcode.ThisisoftenthecaseasmanymethodshavenativepartsandtheobjectshandledasmethodparametersbecomeGCroots.Forexa

java - 即使没有 GC 根,类加载器也不会被垃圾回收

我们有一个在GlassfishV2.1.1下运行的复杂应用程序。为了能够动态加载我们的代码,我们实现了一个能够重新定义类的CustomClassloader。行为非常简单:当动态加载的类发生变化时,CustomClassloader的当前实例将被“丢弃”,并创建一个新实例来重新定义所需的类。除了同一个类被重新加载几次后(因此每次创建一个新的CustomClassloader),这工作得很好,我们得到一个PermGen空间错误,因为CustomClassloader的其他实例没有被垃圾收集。(该类应该只有一个实例)我尝试了不同的方法来追踪泄漏的位置:visualvm=>我进行堆转储并提取

java - 长时间 GC 在应用程序中暂停

我目前运行的应用程序需要最大堆大小为16GB。目前我使用以下标志来处理垃圾回收。-XX\:+UseParNewGC,-XX\:+UseConcMarkSweepGC,-XX:CMSInitiatingOccupancyFraction=50,-XX\:+DisableExplicitGC,-XX\:+PrintGCDateStamps,-XX\:+PrintGCDetails,-Xloggc\:/home/user/logs/gc.log但是,我注意到在某些垃圾回收过程中,应用程序会锁定几秒钟然后继续运行-这是完全不能接受的,因为它是游戏服务器。可以从我的垃圾收集日志中找到一份文件he

java - 哪些 VM 或 GC 支持 JNI 固定?

GetArrayElements函数族被记录为复制数组或将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为比GetPrimitiveArrayCritical更安全、限制更少的替代方案.但是,我想知道哪些VM和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们。 最佳答案 较旧的IBMJVM已固定(1.4及更早版本-即:不是当前的IBMJ9JVM),但从那时起,它们就没有了。一般来说,JVM不喜欢固定,因为它确实会扰乱复制垃圾收集器,而这正是当今大多数生产JVM所做的事情。我不是100%最新的(即:最新的Ja

java - 为什么 WeakHashMap 在 GC 后对值有强引用?

WeakHashMap中的关键对象变得弱可达。并且map应该在GC之后删除条目。但是对值对象的强引用仍然存在。为什么?使用Guava弱键映射观察到相同的行为。预期输出:...refKey.get=nullrefValue.get=null但是我得到了输出:map.keys=[]map.values=[]map.size=0refKey.get=nullrefValue.get=(123)代码:importjava.lang.ref.WeakReference;importjava.util.Map;importjava.util.WeakHashMap;importcom.google

java - 为 Java 音频应用程序调优 GC

我注意到在java中播放音频时,gc中的MarkSweepCompact阶段太长并导致短暂的静音,这是NotAcceptable。所以我需要使用低暂停gc。我尝试过Parallel和CMS,它们似乎工作得更好,因为我认为暂停时间更短,而且它们不像默认的那样频繁地进行完整收集。到目前为止,我已经使用以下ParallelGC选项测试了我的程序:-XX:+UseParallelGC-XX:MaxGCPauseMillis=70对于ConcurrentMarkSweep:-XX:+UseConcMarkSweepGC-XX:+CMSIncrementalMode-XX:+CMSIncremen

java - 有没有办法告诉 JVM 当前正在使用哪种 GC 算法

我正在使用Java5,我们的自定义服务器应用程序需要GC调整,因为有时我们会在高峰时段遇到15-20秒的暂停。我们在服务器类机器上运行Java5,其JVM参数如-server-d64有没有办法知道JVM当前使用的是哪种GC算法?http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html在运行服务器VM的服务器级机器上,垃圾收集器(GC)已从以前的串行收集器(-XX:+UseSerialGC)更改为并行收集器(-XX:+UseParallelGC).您可以通过对java命令使用-XX:+UseSerialGC命