草庐IT

memory-leaks

全部标签

java - 最终字段如何不泄漏内存?

多年来,毫无疑问,我一直在使用final关键字来表示在实例/类的生命周期内不应更改的字段。我突然想到了...所以给出这个例子:publicclassTestFinalGC{privateTestFinalGC(){}privatefinalObjectobj=newObject();publicstaticvoidmain(String[]args){TestFinalGCinstance=newTestFinalGC();//instanceRef->actualinstance->?objref->actualobjSystem.out.println(instance.obj);

java - 与 Java 堆大小作斗争,本地 Java 和 Java web 启动之间的巨大差异

上周末我接到一个客户的电话,告诉我他们的Java程序在导入数据时没有响应。数据是一个包含4个工作表的简单Excel工作簿。正在从列中读取所有数据并将其添加到数据库中。所以我开始调查并得到了一些奇怪的结果。使用RuninNetbeans测试导入。这使用Java64位实例:第一次运行第二次运行使用JavaWebstart测试导入。这是通过打开JNLP文件并使用Java32位实例启动的:第一次运行在这种情况下,我遇到了客户报告的相同问题,程序在导入过程进行了一段时间后停止响应。这是因为据我所知,我已达到最大堆大小(红色圆圈)。第二次运行所以我决定通过将以下内容添加到我的JNLP文件来增加初始

java - 如何在 java 中找到匿名类的 GC 根?

就在今天,我发现我的应用程序中存在内存泄漏,大量对象创建为匿名类。这是一个典型的例子,每个对象都定义了自己的类并将其放入堆中。在运行时内存分析器中查找并非易事,Eclipse内存分析器完成的堆转储分析也无济于事。我想知道如何记录在运行时使用线程ID(或至少是父类加载器)创建的所有匿名类。我认为仅凭这一点就可以轻松找到根本原因。 最佳答案 我不确定列出所有匿名类是否能让你到达任何地方,通常有很多匿名类。您可能需要的是搜索由内部类引用(包括匿名类)保留的类实例的逻辑。在JProfiler,有相应的检查:检查创建的对象集包含所有此类实例,

java - 调试奇怪的内存泄漏 - Java/Tomcat

我在Tomcat下运行的Java应用程序遇到了一个非常奇怪的问题。我们尝试在1周的冲刺中从新生成的新产品更新生产代码,该应用程序已经运行了几个月没有打嗝,然后这段新代码使我们的Linux服务器在一段时间后开始交换。非常奇怪的是,当查看VisualVM的内存使用情况时,它从未超过最大堆大小,JVM没有抛出OutOfMemory,机器只开始交换,JVM甚至在交换之后继续运行。所以,似乎是从某处泄漏了内存,似乎是从新代码中泄漏的,但奇怪的是它不在JVM内部,关于如何调试它有什么想法吗?谢谢! 最佳答案 交换不是泄漏的决定性指标。它是由低物

java - Stateless ejb 不删除池

我遇到了内存泄漏问题,因为EJB没有从池中删除。ejb是3.0并且是无状态的。Inmyjbossjmx-console4.3,thestatisticsofaparticularejblookslike:AvailableCount30MaxSize30CurrentSize5727CreateCount5727RemoveCount0我的问题是:为什么“删除计数”没有增加?并且“当前大小”大于“最大大小”? 最佳答案 伙计,你遇到了一个可怕的错误,其中SLSB没有被清除和泄漏......几周前我们在我们的生产环境中遇到了这个问题.

java - Tomcat 崩溃 : There is insufficient memory for the Java Runtime Environment to continue

我们正在运行一个用户数量较少的网络应用程序,大约7个,但显示图像的负载很高。最近我们升级到Java6u43和Tomcat6.036,在使用了一段时间(大约一周)后,tomcat服务崩溃了。重新启动后,它可以运行几天,或者只运行几个小时,然后再次崩溃。即使在重新启动服务器后它再次崩溃,我们甚至在Activity10分钟后看到了这种情况。在tomcat的bin文件夹中的hs_err_pid文件中总是有相同的信息。请参阅下面的完整错误消息示例。native内存总是不足,主要Activity线程始终是JavaThread“C2CompilerThread1”,但始终处于不同的方法中。我们在wi

java - 可能的内存泄漏?

我有一个正在运行的javawebapp,我正在使用visualVM进行监控。这是堆的图:使用两组请求进行了测试,一组在大约3:20,另一组在大约4:40(它们在图中表示为仅有的两个峰值)。我的问题是:这是否意味着我有内存泄漏?我担心中间部分,虽然GC运行,但堆一直保持在250MB。非常感谢您的见解。 最佳答案 在3:20的第一个请求导致一些内存被占用,但请注意,在第二个请求之后的GC回收了大部分内存。另外我认为majorGC是在4:40的第二次请求之后才执行的。看起来没有泄漏。我的理论是3:20的请求导致年轻代被填满,由此产生的次要

Java VisualVM 内存采样器 - 如何获取特定类的大小

我的应用程序使用的内存比我想象的要多得多,我试图了解哪个类正在使用大量内存并且可能没有释放它。我正在使用VisualVM,在内存采样器中,我可以看到大部分内存都花在了字符、字符串和字节上,我所有的类都使用了字符串,但正如您所知,VisualVM显示了系统中的所有字符和字符串(所有Chars都与Strings相同,这使得很难理解谁拥有它们),据我了解,保存这些字符串的其他类的大小是在没有字符串的情况下计算的。我如何在这个工具中看到谁是“真正的”最大的类——包含所有这些字符串的类?(最好是我可以从这些类获取它们的字符串,而不是相反)我尝试在heapDump中使用“roottothenear

java - "spark.memory.fraction"好像没有作用

在Spark中,当我从一个函数中从HDFS读取一个大约1GB的字符串时,我遇到了java.lang.OutOfMemoryError:Javaheapspace错误。我使用的执行程序内存是6GB。为了增加用户内存,我什至将spark.memory.fraction减少到0.3,但我仍然遇到同样的错误。似乎降低该值没有效果。我正在使用Spark1.6.1并使用Spark1.6核心库进行编译。我在这里做错了什么吗? 最佳答案 请参阅SparkConfSparkExecutorOOM:如何在Spark上设置内存参数一旦应用程序运行,您将看

java - 类管理自己的内存

EffectiveJava:第6条:消除过时的对象引用。Generallyspeaking,wheneveraclassmanagesitsownmemory,theprogrammershouldbealertformemoryleaks.Wheneveranelementisfreed,anyobjectreferencescontainedintheelementshouldbenulledout.我认为我没有完全理解描述。管理自己内存的类的示例有哪些-我可以想到数组、列表,也许还有映射。谁能更详细地解释书中的项目?谢谢 最佳答案