2012-04-17 18 views
9

Khi phân tích cú pháp tệp lớn, tôi nhận được lỗi sau Caught: java.lang.OutOfMemoryError: Java heap spaceLàm cách nào để phân tích các tệp lớn trong Groovy mà không vượt quá kích thước heap?

Làm cách nào để phân tích các tệp lớn trong Groovy mà không vượt quá kích thước heap?

dụ mã mà không thành công với các file lớn ...

import java.io.File 

def inputFile = new File("c:/dev/test.txt") 
    inputFile.getText().eachLine{ it, i -> 
      ... do something with each line 
     } 

Trả lời

16

Đảm bảo rằng bạn đang lặp lại trên các tập tin theo một cách mà không tải toàn bộ tập tin vào bộ nhớ ...

  • Trong trường hợp này đặc biệt lần lượt inputFile.getText(). eachLine vào inputFile.eachLine
  • không sử dụng .readLines() vì nó sẽ cố gắng và tải toàn bộ tập tin vào bộ nhớ,. eachLine {..} nên được sử dụng thay
  • Bạn cũng có thể mở rộng kích thước heap với một lá cờ JVM, ví dụ như để 1GB bằng cách sử dụng groovy -Xmx1024M myscript.groovy Xem thêm answer here

Xem page này trên mailing list groovy cho thêm thông tin và thảo luận thêm

Mã mà làm việc mà không có một lỗi không gian đống ...

def inputFile = new File("c:/dev/test.txt") 
inputFile.eachLine{ it, i -> 
     ... do something with each line 
    } 
+5

này không quan trọng miễn là nó không phải là một dòng lớn. Nó có thể đun sôi xuống những gì anh ta/cô ấy dự định làm với dữ liệu. – Steven

Các vấn đề liên quan