Articles of 垃圾收集

在CentOS中禁用UseGCOverheadLimit

我需要在我的CentOS服务器中禁用GC开销限制。 这样做的原因是暂时阻止java.lang.OutOfMemoryError: GC overhead limit exceededexception。 但是我在Linux + Java系统上是零,并且不知道如何运行这个命令行: -XX:-UseGCOverheadLimit

监视Java垃圾收集时的CPU,RAM,I / O使用情况

我正在使用-Xloggc将GC消息输出到文件。 不过,我也有兴趣了解GC事件发生时CPU,内存,I / O等系统参数。 我知道sar linux命令在那里,但是我如何知道GC事件发生时的指标,而不是使用时间戳手动比较结果。 Java 1.7 Oracle企业版Linux 2.6.39 谢谢。

Java程序运行一段时间后变慢了

我有一个java程序,这是一个典型的机器学习algorithm,通过一些方程更新一些参数的值: for (int iter=0; iter<1000; iter++) { // 1. Create many temporary variables and do some computations // 2. Update the value for the parameters } 更新参数的计算相当复杂,我必须创build很多临时对象,但是它们不会被引用到循环之外。 循环中的代码是CPU密集型的,不能访问磁盘。 这个程序加载了一个相对较大的训练数据集,因此,我向JVM授予了10G内存(-Xmx10G),远远大于它所需要的(“top”命令或窗口任务pipe理器在〜6G的峰值)。 我在几台安装了Sun热点JDK / JRE 1.8的Linux机器(centos 6,24G内存)和一台窗口机器(win7,12G)上进行了testing。 我没有指定除-Xmx之外的其他JVM参数。 这两台机器都专门用于我的程序。 在Windows中,我的程序运行良好:每次迭代使用非常相似的运行时间。 但是,在所有的centos机器上运行的时间是奇怪的。 它最初运行正常,但是在第7次/第8次迭代时会显着减慢(减慢〜10倍),然后在每次迭代中保持减速〜10%。 我怀疑这可能是由Java的垃圾收集器造成的。 因此,我使用jconsole来监视我的程序。 次要GC在两台机器上都经常发生,这是因为程序在循环中创build了许多临时variables。 此外,我使用“jstat -gcutil $ pid $ 1s”命令并捕获了统计信息: Centos: https ://www.dropbox.com/s/ioz7ai6i1h57eoo/jstat.png ? dl = 0 […]

使用logrotate的垃圾收集器日志(loggc)文件旋转无法正常工作

当使用Linux logrotate命令使用JVM垃圾回收日志选项时,我遇到了一个奇怪的问题。 当执行旋转时,它会将NUL(^ @)值作为参数给JVM的第一行。 假设这是java调用(Test.class位于/ home / test /): java -Xloggc:/home/test/test.log -cp / home / test / Test 该文件的logrotateconfiguration如下: /home/test/test.log { 旋转56 missingok notifempty copytruncate nocreate的 nomail } 我还有一个crontab项目logging每分钟testing的目的: * / 1 * * * * / usr / sbin / logrotate -f /etc/logrotate.d/gcLog 我得出的结论是,JVM写在追加模式,并保留用于写入下一行在相关文件中的某种偏移量,即使该文件被截断logrotate(我可能是错误的)。 我的下一个想法是尝试将stdoutredirect到test.log文件。 我用这个java调用,并保持相同的configurationlogrotate和cron: java -verbose:gc -cp / home / test / […]

什么时候由.NET进程分配的内存被释放回Windows

安装程序 .NET为分段的每一代堆(0,1,2,LOH)分配内存,以便在启动时获得连续的内存块,并在收集之后尝试满足分配请求。 这个分配给每个堆的内存可能会随着应用程序“升温”而平稳下来,除了第2代和大对象堆以外。 在垃圾收集期间,每个堆(0,1,2)都被扫描和压缩,除了刚刚扫过的大对象堆(LOH)之外。 我理解集合的“扫描”部分意味着GC确定哪些对象不再是根源,并且可用于收集(或定稿),而“紧凑”意味着在堆中仍然活着的地址被重新组织可用的剩余堆有更多可用的连续内存。 由于超过了堆中每个段的预算,.NET将分配另一个段来完成分配(如果可能的话)。 问题 我的问题归结为每个堆中的内存会发生什么情况,而不是由应用程序 (提交)使用,但仍保留.NET? 什么时候释放回操作系统? 。 我相信这是一个过程可能会消耗大量内存的情况(虚拟大小非常大,但是私有字节很小),但是在检查其堆时大部分是可用空间 。 另外需要注意的是,堆的总大小也可能相当小 ,并且不考虑进程消耗的内存。 没有阻塞的终结器,所有看起来都很健康的进程 – 它可能已经运行了几个星期,然后触发监视器警报(例如)。 尝试进一步澄清问题,如果您阅读了Tess .NET内存pipe理 – 餐厅类比 ,如果表是堆段,那么餐厅是否会丢失表(例如,免费的堆段)? 编辑 删除了工作组和鸡只的混淆参考 添加了对Tess餐厅类比的参考

在.NET中,当你最小化程序时,垃圾回收器会被调用吗?

我用C#创build了一个程序。 该程序使用了大约60-70 MB的记忆。 但是,当我最小化这个程序时,它需要更less的内存,也就是只有10 MB。 当我最大化或回到该程序时,它使用了20 MB … 为什么会这样呢? 当你最小化程序时,垃圾收集器是否被调用?

如何从Windows命令行运行时请求JVM垃圾回收(而不是从代码)

如何从外部请求Java垃圾回收,从JAR(使用Windows BAT)启动程序? 从Java代码我可以用System.gc() 运行JNLP分发时,我从控制面板/ Java / …中打开了这个“Java控制台”,而这个Java控制台提供了手动垃圾收集。 但是…当我从命令行/蝙蝠运行jar时,java控制台似乎并没有打开。 简单的search引擎找不到帮助,也许有人在这里?

如何在Windows 7中打开GCStress?

我正在debugging一个GC堆腐败,并来到了我想尝试在WinDbg + PageHeap + AppVerifier + GCStress下运行该程序的步骤。 我发现在文章软件崩溃:错误模块mscorwks.dll,版本1.1.4322.2379 ,我可以启用GCStress像这样: reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v HeapVerify /t REG_DWORD /d 1 reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v StressLog /t REG_DWORD /d 1 reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v GCStress /t REG_DWORD /d 3 reg.exe add "HKLM\SOFTWARE\Microsoft\.NETFramework" /f /v FastGcStress /t REG_DWORD /d 2 (我正在尝试这种方法,它需要程序永远启动,我删除了registry中的最后两个条目,使其工作,可能是方法本身有问题。 或者在没有非托pipe模块的gc_heap :: garbage_collect中的.NET 4 Runtime中的Access […]

C ++标准库和Boehm垃圾收集器

我想在Linux / AMD64 / Debian上用GCC 4.6开发一个multithreading的C ++应用程序(最终大部分的C ++代码将由应用程序本身生成,可以被视为一种高级的域特定语言)可能是最新的C ++ 11标准)。 我真的想用Boehm的保守的垃圾收集器来分配所有的堆,因为我想用new(GC)分配,而且从不打扰delete 。 我假设Boehm的GC工作得很好。 使用C ++(而不是C)的主要动机是C ++标准库提供的所有algorithm和集合std::map … std::vector 。 Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc / gc_allocator.h中)。 我应该重新定义operator ::new作为Boehm的吗? 或者我应该使用显式的分配器模板参数设置为一些gc_allocator所有集合模板? 我不明白第二个模板参数(分配器)对std :: vector的作用吗? 是用来分配vector内部数据还是分配每个单独的元素? 那么std::string -s呢? 如何使他们的数据GC分配? 我应该有我自己的string,使用basic_string模板与gc_allocator ? 有没有办法让GC_malloc_atomic而不是GC_malloc分配的char内部数组? 或者你build议不要使用Boehm GC与g ++编译的应用程序? 问候。