Tag: 垃圾收集

内存泄漏,弹簧3.2.0.RELEASE,httpcomponents 4.2.3

使用spring 3.2.0.RELEASE resttemplate和httpcomponents 4.2.3进行rest调用。 内存占用量稳步增长,直到达到最大值。 以下是配置: HttpClient的: import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.params.CoreConnectionPNames; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import java.security.KeyStore; public class HttpClient { private static final int DEFAULT_READ_TIMEOUT_MILLISECONDS = (60 * 1000); private KeyStore keystore; private String password; private int MAX_TOTAL_CONNECTION; private int MAX_PER_ROUTE; public […]

如何配置GC不能阻止世界?

假设我有一个JVM 1.7,它可以正常运行,最大1G。 堆大小。 并且只使用~0.5G的堆。 在某些时刻,堆使用量在几分钟内急剧增加(我怀疑负载增加而不是内存泄漏)并且GC( PS MarkSweep )启动。 GC运行约30分钟。 并且服务器没有响应所有时间。 堆统计显示,当时Old Gen堆使用量增加, Eden减少, max Survivor增加。 JVM使用默认选项-XX:+UseParallelGC 我将尝试增加堆,限制输入数据大小等。但我想知道如何调整GC以使 “停止世界”半小时。 我不介意服务器是否运行速度慢但我不想让它停止响应。 如何配置GC不能阻止世界 ?

Java 8中的默认Full GC间隔是多少

我们在生产服务器上发现了一个奇怪的行为(JavaEE,Wildfly 10)。 Java VM每小时执行一次Full GC,尽管仍有足够的可用内存。 VM启动参数为: -server -Xms4g -Xmx8g 以下参数未激活: -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 那么Java 8中的默认Full GC间隔是什么?如何将其配置为动态?

删除Java中的一部分数组以释放堆上的内存

我正在为Java中的背包问题实现动态编程算法。 我声明了数组,然后将其大小初始化为[对象数] [背包的容量]。 当我的对象数量或容量变得太大时,我会收到内存错误,因为堆上的空间不足。 我的问题是:如果我继续删除双数组中的行,Java会在删除时释放内存吗? 或者Java是否保留了我最初创建的数组大小的内存空间? 如果是后者,有没有办法在Java中手动释放内存? 谢谢你的帮助!

为什么我会遇到长时间非GC相关的应用程序暂停?

我一直在GC日志中看到非常长的应用程序暂停,这看起来与垃圾收集无关。 该应用程序在16GB堆上,分配的内存吞吐量非常大。 据我所知,GC日志将显示与GC不一定相关的暂停,这似乎就是这种情况。 此外,在这些暂停期间,CPU达到100%,没有磁盘或内存I / O,并且没有日志记录活动(由于所有应用程序线程都被停止)。 关于可能导致这些长时间停顿的任何想法,或者有关如何跟踪根本原因的任何建议? 以下是日志中的相关片段(请注意151秒暂停): 2015-04-21T06:30:04.834-0500: 217179.483: [GC (Allocation Failure)2015-04-21T06:30:04.849-0500: 217179.483: [ParNew Desired survivor size 43614208 bytes, new threshold 6 (max 6) – age 1: 19876896 bytes, 19876896 total – age 2: 15903904 bytes, 35780800 total – age 3: 617120 bytes, 36397920 total – age 4: 34096 bytes, 36432016 total – age […]

在JVM中优化Xms / Xmx / XX:MaxPermSize

获得Xms/Xmx/XX:MaxPermSize优化值的必要步骤是什么Xms/Xmx/XX:MaxPermSize ? 当然我可以设置一个很大的值但是你知道GC需要花费大量时间。 当我可以节省时间进行测试并找到这些价值时 , 一般建议是什么? 例如,以下数字是否有帮助? Eden Space heap usage – 42MB / 62MB (used / committed) Survivor Space heap usage – 8.5MB / 8.5MB (used / committed) CMS Old Gen heap usage – 100MB / 217MB (used / committed) Non-heap memory pool usage – 36MB

暂停所有线程:使用Threads – ms警告ms

我有2个Thread进行一些网络计算。 当我运行我的应用程序并在启动我的第二个Thread我得到一个: Suspending all threads took: ms警告后跟: Background sticky concurrent mark sweep GC freed 246745(21MB) AllocSpace objects, 169(6MB) LOS objects, 33% free, 31MB/47MB, paused 1.972ms total 127.267ms警告。 有时我会得到那两个警告,有时我会收到很多这两个警告,直到我决定终止应用程序运行。 在这一点上,它只是运行主Thread ,基本上什么都不做。 这是相关的代码: MainActivity.java : protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Getting html page through a thread this.getHtmlPageThread = new GetHtmlPageThread(URL_STRING); this.getHtmlPageThread.start(); // The thread […]

如何清除对象(HashMap)进行垃圾收集 – Java

所以我在这里有一个java程序,它操纵大量数据并将其存储到对象中(主要是哈希映射)。 在运行时的某个时刻,数据变得无用,我需要丢弃,这样我就可以释放一些内存。 我的问题是丢弃这些数据被垃圾收集的最佳行为是什么? 我已经尝试过map.clear(),但是这还不足以清除地图分配的内存。 编辑 (添加我尝试的替代品) 我也尝试过system.gc()来强制垃圾收集器运行,但它没有帮助

如何在过度的GC中加快OOM?

偶尔我的JVM会耗尽内存,而不是OOMing我可以从中恢复(或者是dumpDumpOnOOM和调试),它会在GC丢失几个小时后才会丢失内存。 这与(未答复的)问题基本相同: 如何配置Java GC Overhead Limit? 但我怀疑答案是你不能调整98%/ 2%的阈值,所以我要求任何方式达到类似的效果。 注意过多的GC,最好导致OOM,或者杀死JVM等。

在调用intern()方法后,内存中的新String()对象何时清除

List list = new ArrayList(); for (int i = 0; i < 1000; i++) { StringBuilder sb = new StringBuilder(); String string = sb.toString(); string = string.intern() list.add(string); } 在上面的示例中,在调用string.intern()方法之后,何时清除在堆(sb.toString)中创建的1000个对象? 编辑1:如果无法保证可以清除这些对象。 假设GC没有运行,使用string.intern()本身是否过时了? (在内存使用方面?) 有没有办法在使用intern()方法时减少内存使用/对象创建 ?