Tag: 内存泄漏

Servlet“已启动一个线程但未能阻止它” – Tomcat中的内存泄漏

Apache Tomcat多次说: Web应用程序[/ MyServlet]似乎已启动名为[pool-61-thread-2]的线程,但未能将其停止。 这很可能造成内存泄漏。 这有危险吗? servlet应该能够处理10.000个请求/天。 完成后如何关闭线程? class Worker { private final CountDownLatch startSignal; private final CountDownLatch doneSignal; private final int threadNumber; Worker( CountDownLatch startSignal, CountDownLatch doneSignal, int threadNumber ){ this.startSignal = startSignal; this.doneSignal = doneSignal; this.threadNumber = threadNumber; } public String[][] getSomeStrArrArr() { String[][] isRs = new String[8][20]; String[][] inRs = new String[8][20]; […]

Java MySQL JDBC内存泄漏

好吧,所以我有这个程序有很多(~300)个线程,每个线程都与一个中央数据库通信。 我创建了一个到DB的全局连接,然后每个线程都会创建业务创建语句并执行它们。 在某个地方,我有一个巨大的内存泄漏。 在分析堆转储后,我看到com.mysql.jdbc.JDBC4Connection对象是70 MB,因为它在“openStatements”(哈希映射)中有800,000个项目。 在某个地方它没有正确地关闭我创建的语句,但我不能为我的生活弄清楚在哪里(每次打开一个,我也关闭它)。 有什么想法可能会发生吗?

Java Runtime.maxMemory不正确?

我运行了以下方法Runtime.getRuntime()。maxMemory()并给出了85196800。 但是,然后我从命令行运行顶部,它显示 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8672 root 20 0 1284m 156m 4296 S 0.3 60.9 0:33.35 java 这不显示使用156M的ram吗? 有什么想法发生了什么?

从文本文件中读取巨大的字符串

我有一个大文本文件,但没有任何换行符。 它只包含一个长字符串(1个庞大的字符串,包含所有ASCII字符),但到目前为止,任何工作都可以正常,因为我可以用Java读取整行到内存中,但我想知道是否有内存泄漏问题,因为文件变得像5GB +那么大,并且程序无法立即将整个文件读入内存,所以在这种情况下读取此类文件的最佳方法是什么? 我们可以把这条巨大的线分成2个部分甚至是多个块吗? 这是我如何阅读文件 BufferedReader buf = new BufferedReader(new FileReader(“input.txt”)); String line; while((line = buf.readLine()) != null){ }

unclosed流导致java中的内存泄漏?

我相信开放流会导致java中的内存泄漏(至少java 1.6及更早版本确实存在这个问题)。 但是,在搜索时(即使在这里),我发现有些人同意这一点,而其他人却没有。 所以,如果我写这个程序: import java.io.*; public class CreatingMemoryLeak { public static void main(String args[]) { String s = “xxxxxxx”; InputStream in = new ByteArrayInputStream(ss.getBytes()); BufferedInputStream bf = new BufferedInputStream(in); try { while(bf.read()>0) { System.out.println(“got it”); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(“Here is a input stream ” […]

为什么空Java程序消耗内存?

我正在探索Java中的内存使用,以了解我的程序泄漏内存的原因。 在我的main while循环中剥离代码之后,我仍然会随着时间的推移增加内存使用量。 思考空程序的内存使用情况: class Nothing { public static void main(String[] args) { while(true); } } 我仍然看到内存增加: 所以我的问题是:为什么还有锯齿形? 为什么GC运行时不会保存所有内存(每次gc运行(谷值),使用的内存增加10-20Kb(与之前的谷值相比))? 编辑: java版“1.6.0_29” Java(TM)SE运行时环境(版本1.6.0_29-b11) Java HotSpot(TM)客户端VM(内置20.4-b02,混合模式,共享) 操作系统:Windows 7 Enterprise-32位

如何垃圾收集直接缓冲java

我有一个内存泄漏,我已经隔离到不正确的直接字节缓冲区。 ByteBuffer buff = ByteBuffer.allocateDirect(7777777) GC收集包含这些缓冲区的对象,但不会丢弃缓冲区本身。 如果我实例化足够的包含缓冲区的瞬态对象,我会得到这个令人鼓舞的消息。 java.lang.OutOfMemoryError:直接缓冲内存 我一直在寻找这个问题,显然 buff.clear 和 System.gc()的 不起作用

如何在Eclipse中强制进行线程转储?

我正在通过BEA Weblogic Server v9.2运行时环境在Eclipse中启动Weblogic应用程序。 如果这是直接从命令行运行,我会执行ctrl-BREAK来强制进行线程转储。 有没有办法在Eclipse中做到这一点?

String类中的substring方法导致内存泄漏

据说String类中的substring方法会导致内存泄漏。 这是真的吗? 怎么样? 有什么替代方案吗? 特别是寻找答案, 在java中可能导致内存泄漏的所有其他事情是什么? 这将有助于我在编码时保持谨慎。

Java String.substring方法潜在的内存泄漏?

我正在浏览String类API,看起来像substring方法导致潜在的内存泄漏,因为它与原始String共享相同的字符数组。 如果原始字符串很大,则子字符串返回的小字符串可以防止Java中的原始字符串(由大数组备份)进行垃圾收集。 任何想法或我读错了API。