Java 字符串内存泄漏

标签 java memory memory-leaks garbage-collection out-of-memory

我不是 java 专家。

我的代码正在将文件读入 String。此代码每 5 分钟执行一次。 文件大小不同。有时是 100 有时是 1000 行。

几天后,我经历了内存不足。

我的问题是,当我的代码超出 读取文件函数 的范围时,Java 是否会垃圾收集字符串?

我对在互联网上阅读感到很困惑。有人说它不会被删除并使用 StringBuffer

// Demonstrate FileReader.

import java.io.*;
class FileReaderDemo {
    public static void read(BufferedReader br) throws Exception {
        long length = 0;
        String s;
        while (true) {
            s = br.readLine();
            s += "abcd";
            if (s == null) {
                break;
            }
            length += s.length();
            //System.out.println(s);
        }
        System.out.println("Read: " + (length / 1024 / 1024) + " MB");
    }

    public static void main(String args[]) throws Exception {
        //FileReader fr = new FileReader("FileReaderDemo.java");
        FileReader fr = new FileReader("big_file.txt.1");
        BufferedReader br = new BufferedReader(fr);
        String s;
        read(br);
        fr = new FileReader("big_file.txt.1");
        br = new BufferedReader(fr);
        read(br);
        fr = new FileReader("big_file.txt.1");
        br = new BufferedReader(fr);
        read(br);
        fr = new FileReader("big_file.txt.1");
        br = new BufferedReader(fr);
        read(br);
        BufferedReader in = new BufferedReader(new InputStreamReader(System. in )); in .readLine();
        fr.close();
    }
}

最佳答案

Hello, I am not java expert.

每个人都有可以学习的东西。

My code is reading a file into a String, This code gets executed every 5 minutes. Now Sometime file size of 100 lines sometimes 1000 lines.

听起来不是很大或很频繁。应该没有问题。

I am experience Out Of Memory, after some days.

您应该能够获得堆转储并查看内存不足的位置以及原因。

Question I have is, When my codes goes out of scope of the Reading file Function. Does Java Garbage collect the String .

当它不再通过强引用访问时,可以收集它。

I am pretty confuse by reading on internet some says it does not get deleted and use StringBuffer

听起来您来对地方了。没听说过。

关于Java 字符串内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072153/

相关文章:

c - 即使没有内存泄漏,Valgrind 也会出现无效读取错误

C++ std::string 内部内存处理

mysql - MySQL 在执行 "select"时如何使用内存?

c++ - Qwt内存泄漏

ios - 使用照片框架请求照片时发生内存泄漏

java - 单词在句子中的共现

java - 以编程方式将文本颜色设置为二次色

java - 执行java字段中的代码

java - 在netbeans java中使用网络摄像头拍照?

java - 调用 createBitmap 时出现内存不足错误