메모리 부족 오류, Java 힙 공간

아리프 타우 피 쿠라 만

4 백만 줄 이상, 크기가 400MB 이상인 로그 파일을 읽으려고하는데 Out of Memory Error : java heap space가 발생 합니다. 이것은 내 코드입니다.

File file = new File("C:\\file.log");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuilder stringBuffer = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line);
        }

힙 메모리를 1GB로 늘리려 고했지만 여전히 해당 메시지가 나타납니다. 가능한 원인은 무엇입니까?

영혼 거장

좋아, 이미받은 댓글을 읽고 단서가 있어야합니다.

문제 설명 :

로그 파일의 크기는 400MB입니다. 이것은 바이트 단위로 측정됩니다. 이제 한 줄씩 읽고 line = bufferedReader.readLine()일부 바이트를 문자열로 변환합니다.

StringJava 인스턴스는 내부적으로 char[]. 그러나 charJava에서는 2 바이트가 필요합니다! 따라서 모든 문자를 저장하려면 최소 800MB의 힙 공간이 필요합니다. 다른 여러 개체도 할당하고 JVM 자체에 약간의 메모리가 필요하므로 1GB로는 충분하지 않을 가능성이 큽니다.

또한 StringBuffer(그런데 : 더 나은 사용 StringBuilder) 내부적으로 다시 a를 사용하며 char[]필요할 때 자동으로 확장됩니다. 이 확장은 길이를 두 배로 늘려 수행됩니다. 따라서 400MB 파일의 경우 char[]길이가 512M입니다. 여전히 상기 시켜라 : 문자는 2 바이트를 차지한다.

그렇다면 해결책은 무엇입니까? 간단히 말해서 : 전체 파일을 메모리로 읽지 마십시오!

대신 다음을 수행하십시오.

class LogAnalyzer {
    private final File logFile;

    LogAnalyzer(File logFile) {
        this.logFile = logFile;
    }

    void analyze() throws IOException {
        try(FileReader fileReader = new FileReader(logFile)) {
            try(BufferedReader bufferedReader = new BufferedReader(fileReader)) {
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    analyzeLine(line);
                }
            }
        }
    }

    private void analyzeLine(String line) {
        // do whatever you need here
    }
}

일부 행을 유지해야하는 경우 LogAnalyzer의 일부 인스턴스 필드에 저장하거나이 클래스가 상태 머신처럼 작동하도록해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

메모리 부족 오류 : Java 힙 공간-큰 배열 크기 사용

분류에서Dev

힙 공간이 부족한 Java 메모리

분류에서Dev

MySQL의 메모리 부족 Java 힙 spcae

분류에서Dev

힙 공간이 부족한 Java의 Dijkstra 알고리즘?

분류에서Dev

Java 메모리 부족-힙 크기 부족

분류에서Dev

Python Spark : Java 메모리 부족 오류

분류에서Dev

ByteArrayInputStream 힙 메모리 부족

분류에서Dev

Mapreduce 실행 중 Java 힙 공간 오류

분류에서Dev

java 옵션 메모리 부족시 힙 덤프

분류에서Dev

macOS X Sierra에서 JavaScript 힙 메모리 부족 오류와 함께 ROS 충돌

분류에서Dev

Java 메모리 부족 어레이 오류

분류에서Dev

Bitmap.createBitmap 메모리 부족 오류 Java

분류에서Dev

WEKA에서 메모리 부족 오류를 방지하려면 힙을 늘립니다.

분류에서Dev

Scala Android 컴파일 오류-Java 힙 공간

분류에서Dev

중첩 된 루프로 인해 OutOfMemory 오류 : Java 힙 공간

분류에서Dev

중첩 된 루프로 인해 OutOfMemory 오류 : Java 힙 공간

분류에서Dev

HCatLoader를 사용하는 PIG, Java 힙 공간 오류

분류에서Dev

Java 힙 공간 오류가 발생합니다.

분류에서Dev

감소 단계 중 MapReduce Java 힙 공간 오류

분류에서Dev

OutOfMemoryError Java 힙 공간

분류에서Dev

메모리 부족 오류, permgen, Java 8에서 Java 7로 이동

분류에서Dev

치명적 오류 수정 방법 : 힙 한계에 근접한 비효율적 인 표시 압축 실패-JavaScript 힙 메모리 부족

분류에서Dev

UPC 런타임 오류를 해결하는 방법 : 공유 메모리 부족

분류에서Dev

Neo4j : create unique 문으로 쿼리를 실행 한 후 Java 힙 공간 오류

분류에서Dev

Fontconfig 오류- "메모리 부족"

분류에서Dev

Fontconfig 오류- "메모리 부족"

분류에서Dev

Fontconfig 오류- "메모리 부족"

분류에서Dev

ConnectionQueueStatsProvider의 메모리 부족 오류

분류에서Dev

Imageview의 Android 메모리 부족 오류

Related 관련 기사

  1. 1

    메모리 부족 오류 : Java 힙 공간-큰 배열 크기 사용

  2. 2

    힙 공간이 부족한 Java 메모리

  3. 3

    MySQL의 메모리 부족 Java 힙 spcae

  4. 4

    힙 공간이 부족한 Java의 Dijkstra 알고리즘?

  5. 5

    Java 메모리 부족-힙 크기 부족

  6. 6

    Python Spark : Java 메모리 부족 오류

  7. 7

    ByteArrayInputStream 힙 메모리 부족

  8. 8

    Mapreduce 실행 중 Java 힙 공간 오류

  9. 9

    java 옵션 메모리 부족시 힙 덤프

  10. 10

    macOS X Sierra에서 JavaScript 힙 메모리 부족 오류와 함께 ROS 충돌

  11. 11

    Java 메모리 부족 어레이 오류

  12. 12

    Bitmap.createBitmap 메모리 부족 오류 Java

  13. 13

    WEKA에서 메모리 부족 오류를 방지하려면 힙을 늘립니다.

  14. 14

    Scala Android 컴파일 오류-Java 힙 공간

  15. 15

    중첩 된 루프로 인해 OutOfMemory 오류 : Java 힙 공간

  16. 16

    중첩 된 루프로 인해 OutOfMemory 오류 : Java 힙 공간

  17. 17

    HCatLoader를 사용하는 PIG, Java 힙 공간 오류

  18. 18

    Java 힙 공간 오류가 발생합니다.

  19. 19

    감소 단계 중 MapReduce Java 힙 공간 오류

  20. 20

    OutOfMemoryError Java 힙 공간

  21. 21

    메모리 부족 오류, permgen, Java 8에서 Java 7로 이동

  22. 22

    치명적 오류 수정 방법 : 힙 한계에 근접한 비효율적 인 표시 압축 실패-JavaScript 힙 메모리 부족

  23. 23

    UPC 런타임 오류를 해결하는 방법 : 공유 메모리 부족

  24. 24

    Neo4j : create unique 문으로 쿼리를 실행 한 후 Java 힙 공간 오류

  25. 25

    Fontconfig 오류- "메모리 부족"

  26. 26

    Fontconfig 오류- "메모리 부족"

  27. 27

    Fontconfig 오류- "메모리 부족"

  28. 28

    ConnectionQueueStatsProvider의 메모리 부족 오류

  29. 29

    Imageview의 Android 메모리 부족 오류

뜨겁다태그

보관