以下是我的JVM设置:JAVA_OPTS=-server-Xms2G-Xmx2G-XX:MaxPermSize=512M-Dsun.rmi.dgc.client.gcInterval=1200000-Dsun.rmi.dgc.server.gcInterval=1200000-XX:+UseParallelOldGC-XX:ParallelGCThreads=2-XX:+UseCompressedOops-Djava.net.preferIPv4Stack=true-Djboss.modules.system.pkgs=org.jbos88,server=y,suspend=n问题:总
我用在Linux服务器上运行的Java编写服务器端应用程序。我使用hibernate打开数据库session,使用nativesql查询它并始终通过try、catch、finally关闭此session。我的服务器以非常高的频率使用hibernate查询数据库。我已经定义了MaxHeapSize因为它是3000M但它通常在RAM上使用2.7GB,它可以减少但比增加慢。有时它会增长到3.6GB内存使用量,超过我在启动时定义的MaxHeapSize。当使用的内存为3.6GB时,我尝试使用-jmap命令将其转储并得到一个大小仅为1.3GB的堆转储。我用eclipseMAT来分析,这里是MAT
我已经追了好几天了。我们在我们的应用程序中使用JAXB,sun实现。当停止Tomcat(6或7)时,在catalina日志文件中记录了严重的内存泄漏,列出了我们应用程序中的所有JAXB类,两个不同包中的两组。我浏览了很多google和Stackoverflow链接。我使用了JProfiler,它告诉我Tomcat在不使用枚举时会保留枚举,但这不应该是问题所在。marshaller或unmarshaller的所有实例都在本地创建并设置为null以进行积极的GC。我确保在销毁servlet时JAXBcontext为空,并且在我的contextDestroyed中运行System.gc();
在我的网络应用程序中,我广泛使用了数据库。我有一个抽象的servlet,所有需要数据库连接的servlet都继承自它。该抽象servlet创建一个数据库连接,调用必须由继承servlet覆盖的抽象方法来执行它们的逻辑,然后关闭连接。我不使用连接池,因为我的应用程序的用户和操作数量非常有限。我的问题是,如果我不关闭ResultSet、PreparedStatement和Statement,最糟糕的情况是什么如果创建它们的Connection始终关闭,我的继承servlet会创建什么? 最佳答案 Statement#close()的ja
我想知道当您有一个使用反射来获取某些字段值的类时,垃圾回收是如何工作的。当不使用正式语言语法访问它们时,JVM如何知道这些字段引用的值是可访问的,因此目前不符合垃圾回收条件?指出问题的一小段(尽管此处过分强调了反射(reflection)):/****/importjava.lang.reflect.Field;publicclassB{protectedBprevious=null,next=null;/****/publicB(Bfrom){this.previous=from;}publicvoidtransition(Bto){this.next=to;}publicBnext
我有一个C程序,它使用JNI在java存储中存储一些对象。(在有人问之前,这里需要使用javastore,我必须用C编写一个客户端,它能够从这个store添加和检索对象)。我编写了程序并尝试添加100000个大小为1KB的对象。但是在仅添加50000个对象后,我收到“内存不足”消息(请注意,每当我无法使用NewStringUTF和NewByteArray函数分配新的字符串或字节数组时,我都会打印这些“内存不足”消息)。那时我的应用程序只使用了80MB的内存。我不明白为什么这些方法返回NULL。有什么我想念的吗。此外,即使我正在释放为java创建的字节数组和字符串,内存也会继续增加。这是
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。这是一个更具体的问题,需要跟进anotherquestionthatIhaveaskedrecently.此问题的正确答案也将获得前一个问题的正确答案(因为它仍处于不确定状态)!基本上,我有一个存在内存泄漏问题的Java桌面应用程序。我正在使用NetbeansIDE中的内存分析器来分析内存问题。这些是我到目前为止已采取的步骤:将新的内存分析器附加到Netb
我正在使用MAT比较两个堆转储。我每天都进行堆转储,它每天增长大约200兆。我认为泄漏与java.util.zip有关,因为表中显示的内容以及我们最近添加了一个压缩和解压缩大量文件的新进程。(见图)此时我打开支配器并过滤.Inflater。那产生了一个很大的java.util.zip.Inflater列表。现在我想看看是什么让它们保持打开状态,所以我选择了一个并运行了路径到GCroot,排除了弱引用和软引用(见图)。看起来这与jar膨胀有关,与我的过程无关。在这一点上,我被卡住了,需要一些建议。编辑1Sean询问了ThreadLocals。如果您查看没有过滤器的dominator_tr
我怀疑我的Java代码中存在native内存泄漏。是否有任何工具可以进行native内存分析?另外,是否有任何工具支持对正在运行的Java进程进行native内存分析?谢谢!!编辑:我已经尝试过MemoryValidator和Purify,但它们似乎只支持32位进程。是否有一些类似于上述工具的工具可以简单地附加到正在运行的Windows进程并为我们提供该特定进程的native内存分析? 最佳答案 TroubleshootingguideforJavaSE6withHotspotVM包含一个相当详尽的部分,介绍了帮助检测native内
我有一个在AmazonEC2上运行的应用程序(使用S3、DynamoDB等多种AWS产品)并且存在内存泄漏。我收集了一些堆转储并通过Eclipse的内存分析器工具运行它们,该工具将数百个sun.security.ssl.SSLSocketImpl实例(占用数十MB内存)确定为可能的泄漏。但我无法弄清楚为什么这些SSLSocketImpl对象没有被处理掉。转储中SSLSocketImpl的大多数实例都有两个引用,一个来自java.lang.ref.Finalizer,一个来自com.amazonaws.internal。SdkSSLSocket。我的堆转储中的终结器线程被报告为空闲,没有