Tag: 垃圾收集

在Java中调整垃圾收集参数

我有一个服务器java组件,它在启动时具有巨大的内存需求,逐渐逐渐消失。 因此,作为启动时的一个例子,内存要求可能会达到4g; 在最初的激增结束后,将降至2g。 我已经将组件配置为以5g的内存开始,组件启动良好; 使用过的内存激增至4g,然后接近2g。 此时堆消耗的内存仍然在4g左右徘徊,我希望将其降低(基本上将可用内存保持在几百mb而不是2g。我尝试使用MinFreeHeapRatio和MaxFreeHeapRatio将它们从默认值降低但这导致在初始峰值期间初始运行后没有触发垃圾收集,并且使用的内存保持在高于平常水平。任何指针都会有很大帮助。

在Java中,如何对垃圾收集对象数组?

当一个对象数组不再被引用时,该数组中的对象是否也被垃圾收集了? (假设没有变量引用元素) 在这个页面中, http : //java.sys-con.com/node/376​​13它说 – “最大的危险是将一个对象放入一个集合而忘记删除它。该对象使用的内存永远不会被回收。 “ 如果确保使引用无效,为什么要无人认领该内存? 谢谢

Java的垃圾收集器会继续并处理循环中声明的变量吗?

如果我有: for (int i; i != 100; i++) { ArrayList myList = buildList(); //… more work here } 我是否必须在循环结束时将myList设置为null以使GC回收它用于myList的内存?

Jmeter java.lang.OutOfMemoryError:超出了GC开销限制

我正在使用Jmeter将工作负载注入部署在AWS EC2实例上的应用程序。 测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,在5分钟内有大约2600个请求。 实际上我有一个m3.xlarge实例,其中部署了应用程序,8个m3.xlarge实例,每个实例运行一个jmeter实例。 使用python脚本,要注入的工作负载在8个客户端实例之间进行分割,因此在示例中,如果原始工作负载要注入800个请求,则每个jmeter实例将注入100个请求。 我所说的完整测试持续10个小时,分为每个5分钟的时间步长。 每5分钟应用一点工作负载变化。 实际上我从每个jmeter实例得到java.lang.OutOfMemoryError:GC开销限制在测试开始后立即超出了错误并且没有请求到达应用程序。 我在网上和stackoverflow上看了很多,我总结出可能的错误可能是: JMV堆大小太低 – >我解决了在每个jmeter实例的jmeter.bat文件中设置以下内容: 设置HEAP = -Xms4g -Xmx4g 设置NEW = -XX:NewSize = 4g -XX:MaxNewSize = 4g 代码中的一些错误导致继续无用的垃圾收集器。 所以我从测试中删除了所有的jmeter监听器。 特别是我使用的是TableVisualizer,ViewResultsFullVisualizer,StatVisualizer和GraphVisualizer。 无论如何问题仍然存在。 我真的不知道如何解决它。 我知道用2600音调请求进行10小时测试可能是一个非常繁重的测试,但我认为应该有一种方法来执行此操作。 我正在使用EC2 m3.xlarge实例,所以我甚至可以将堆大小提高到8G(如果它有用),或者将工作负载分成更多的客户端,因为我使用的是spot实例,所以我不会付出这么多,但是因为我已经将客户端实例的数量从4增加到8,以便解决问题并且不起作用我有点困惑,我想知道r建议,然后继续获得越来越多的资源。 非常感谢你提前。

你在子类中调用super.finalize()吗?

我读(在某处),当子类被垃圾收集时,不能保证调用父类的finalize() ,这是否意味着大多数开发人员在子类中覆盖finalize()并调用super.finalize() ?

在匿名类中使用最终变量时的垃圾收集

如果我有类似以下的代码: public Constructor(final Object o) { taskSystem.add(new CycleTask(15, 15, -1) { @Override public void execute() throws Throwable { //access o here every 15 cycles forever } }); } 什么时候会被垃圾收集,如果有的话? 只有当任务被收集,或者它将永远留在记忆中,因为它是最终的?

为什么JVM在引用计数达到0后立即销毁资源?

我一直想知道为什么Java中的垃圾收集器会在它感觉到而不是执行时激活: if(obj.refCount == 0) { delete obj; } Java如何做到这一点有什么大的优势我忽略了吗? 谢谢

Java中是否存在GC并未引入延迟(停止世界)或者同时运行100%?

只是好奇。 我听说过有关新的G1GC解决延迟问题的事情。 我不能/不想使用RTSJ。 提前致谢

我可以用Java强制垃圾收集吗?

可能重复: 在Java中强制垃圾收集? 我可以用Java强制垃圾收集吗? System.gc()只是一个建议。它没用。 当我确定不再使用某些资源时,为什么我不能强行清理它们呢? 就像C ++中的delete()和C中的free()一样? 当有很多资源无法重用时,这可能真的很糟糕。我们所能做的就是sleep()。 任何解决方案?谢谢

“vm线程”在JDK 1.6中的作用是什么

我们在客户的系统中看到了这个线程的大量活动,因此想知道可能发生的事情。 任何链接,信息,教程? PS:这是在Solaris 10上使用JDK 1.6.0_23进行的。