草庐IT

gc_probability

全部标签

java - 一个有用的指标,用于确定 JVM 何时将陷入内存/GC 故障

我有一个scala数据处理应用程序,95%的时间都可以处理内存中抛给它的数据。剩余的5%如果不加以检查,通常不会遇到OutOfMemoryError,但只会进入主要GC循环,使CPU激增,阻止后台线程执行,即使它完成了,也需要10倍-50倍只要它有足够的内存。我已经实现了可以将数据刷新到磁盘并将磁盘流视为内存中迭代器的系统。它通常比内存慢一个数量级,但足以满足这5%的情况。我目前正在触发一个最大集合上下文的启发式方法,该集合上下文跟踪数据处理中涉及的各种集合的大小。这可行,但实际上只是一个临时的经验阈值。我宁愿对JVM接近上述不良状态使用react并在那时刷新到磁盘。我试过观察内存,但

Java JVM中的GC机制详解

1.GC概述垃圾回收(GarbageCollection,简称GC)机制是JVM中最重要的部分之一。在Java程序运行的过程中,运行时数据区域(包括堆和栈等内存区域)一直都需要使用和回收内存空间。由于Java中的内存分配方式是动态的,所以在程序运行期间,其内存空间的占用量会不断变化。如果Java程序没有进行垃圾回收,那么程序运行过程中使用的内存空间将不断累加,最后内存会被完全占用,导致程序崩溃。因此,为了保证程序正常运行,避免内存被耗尽和泄漏问题,JVM中设计了垃圾回收机制,用来定期清理无用的对象,并回收内存空间。在JVM中,GC操作是一个自动化过程,由JVM自动执行。JVM把一些没有被引用的

java - Android中如何监听GC事件

无论如何我们都可以监控Android中发生的GC事件吗?在Java中,我相信我们可以监听事件http://www.fasterj.com/articles/gcnotifs.shtml但是java.lang.managementAPI在Android中不可用。 最佳答案 为什么需要这个监听器。如果您只是想知道您的应用程序是否内存不足,只需检查一下:当内存变紧时释放内存在您的应用程序生命周期的任何阶段,onTrimMemory()回调还会告诉您整体设备内存何时变低。您应该根据onTrimMemory()提供的以下内存级别进一步释放资源

java - "GC--"在 java 垃圾收集日志中意味着什么?

我们打开了详细的GC日志记录以跟踪已知的内存泄漏并在日志中获得以下条目:...3607872.687:[GC471630K->390767K(462208K),0.0325540secs]3607873.213:[GC--458095K->462181K(462208K),0.2757790secs]3607873.488:[FullGC462181K->382186K(462208K),1.5346420secs]...我理解其中的第一个和第三个,但是“GC--”是什么意思? 最佳答案 我的gc输出中有这些行:44871.602:

java - 如何修复此错误 "GC overhead limit exceeded in Eclipse"

如何修复此错误“在Eclipse中超出了GC开销限制”。当我使用来自ADTandroid的图形布局时出现此问题。 最佳答案 eclipse.ini文件可以编辑。增加内存使用的值。请参阅下面的示例eclipse.ini文件。--launcher.XXMaxPermSize512M-showsplashorg.eclipse.platform--launcher.XXMaxPermSize512m--launcher.defaultActionopenFile--launcher.appendVmargs-showsplashorg.e

java - WeakHashMap 是否在 full GC 期间被清除?

我在使用Wea​​kHashMap时遇到了一些麻烦。考虑这个示例代码:Listlist=newArrayList();Mapmap=newWeakHashMap();StringanObject=newString("string1");StringanOtherObject=newString("string2");map.put(anObject,Calendar.getInstance());map.put(anOtherObject,Calendar.getInstance());//InordertotestiftheweakHashMapworks,iremovetheSt

GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯

环境 pwm.v$catpwm.vmodulePwm(  inputclk,  input[31:0]period,  input[31:0]duty,  outputpwmout);  reg[31:0]counter;  regr_pwmout;  always@(posedgeclk)begin    if(counter      r_pwmout=1;    end    elsebegin      r_pwmout=0;    end    case(counter)      default:        counter=counter+1;      period:    

java - Full GC 实时时间远远超过 user+sys 时间

我们有一个基于WebJava的应用程序在JBoss上运行,允许的最大堆大小约为1.2GB(机器物理内存总量为2GB)。在某些时候,应用程序会停止响应(对客户端)几分钟。经过一些分析,我们发现罪魁祸首是FullGC。以下是详细GC日志的摘录:74477.402:[完整GC[Psyounggen:3648K->0K(332160K)][PSOLDGEN:778476K-->589497K(819200K)]782124K-->589497K(1151360B)秒][Times:user=3.84sys=3.72,real=646.17secs]我不明白的是,FullGC花费的实时怎么可能是

java - 有没有办法在 Java 中强制对弱和/或软引用对象进行 GC?

这是我的用例。我们正试图缩小应用程序中潜在的内存泄漏的范围,并且我们正在使用内存分析工具对堆进行快照,以便我们可以查找对象实例和引用。(如果有帮助,我们正在使用YourKit。)此应用程序广泛使用动态和CGLIB代理,最终在WeakHashMap中存储了大量对类和类加载器的引用。在我们的测试用例运行之后,我们期望所有对对象X及其类加载器的硬引用都消失了,但是由于最终测试用例中涉及许多代理,我们还剩下许多弱/软引用。(我只能找到WeakHashMap引用,但是YourKit将弱引用和软引用都包装到摘要中的一个行项目中,所以我不能确定我没有在某处遗漏软引用。)即使在从JVM请求完整GC之后

java - JVM/GC 是否在程序/线程退出时调用 `finalize()`?

PS:我确实知道如何正确清理,而不依赖于finalize()。Java是否不保证在程序退出时会进行适当的垃圾回收?例如可以说我在缓存中保留了一些数据而不是经常序列化它,我还实现了finalize()希望如果由于任何原因(崩溃除外)我的程序正常退出,然后缓存将由我在finalize()方法中的代码写入DB/file/some-storage。但是根据下面的小实验,JVM似乎并没有“优雅地”清理内存,它只是退出了。Javaspec(参见程序退出)没有说明退出时如何处理内存/gc。还是我应该查看规范的不同部分?以Windows7上使用1.6.0.2764位的以下示例(末尾的输出)为例publ