2013-11-24 10 views
5

Csv dosyasını csv'de 1 satırı temsil ettiği nesnenin Json dosyasına 200K dönüştürmeyi denerim.java.lang.OutOfMemoryError: Java nesnesini Json String'e dönüştürmeyi denediğinde Java yığın alanı String

Java 32 bit ve Proje yapılandırma VM argümanlar yüklediğiniz:

-Xmx1024m Ancak alıyorum: satırda

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) 
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) 
    at java.lang.AbstractStringBuilder.append(Unknown Source) 
    at java.lang.StringBuffer.append(Unknown Source) 
    at java.io.StringWriter.write(Unknown Source) 
    at com.google.gson.stream.JsonWriter.string(JsonWriter.java:478) 
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:328) 
    at com.google.gson.Streams.write(Streams.java:113) 
    at com.google.gson.Streams.write(Streams.java:136) 
    at com.google.gson.Streams.write(Streams.java:136) 
    at com.google.gson.Streams.write(Streams.java:124) 
    at com.google.gson.Streams.write(Streams.java:136) 
    at com.google.gson.Gson.toJson(Gson.java:362) 
    at com.google.gson.Gson.toJson(Gson.java:346) 
    at com.google.gson.Gson.toJson(Gson.java:260) 
    at com.google.gson.Gson.toJson(Gson.java:240) 
    at ConvertFromCsv2JsonTWC.init(ConvertFromCsv2JsonTWC.java:186) 
    at ConvertFromCsv2JsonTWC.main(ConvertFromCsv2JsonTWC.java:48) 

: iyi çalışıyor

Gson gson = new Gson(); 

String output = gson.toJson(container);// <---- crash 

50k için satırlar.

Bu

Json bir şablon ben inşa geçerli:
{ 
    "crs": { 
     "type": "none" 
    }, 
    "type": "FeatureCollection", 
    "features": [{ 
     "geometry": { 
      "type": "Point" 
     }, 
     "properties": { 
      "ap mac": "00:11:22:33:44:55", 
      "ssid": "WiFi", 
      "lat": "35.111111", 
      "long": "-118.11111", 
      "address": "370 xxxxxx", 
      "city": "xxxxxxx", 
      "state": "CA", 
      "zip code": "11111", 
      "country": "US", 
      "business n": "", 
      "location c": "Health Club/Gym", 
      "location q": "", 
      "indoor fla": "yes" 
     }, 
     "point": [35.390284, 
     -118.9929], 
     "id": 0, 
     "type": "Feature" 
    }, 
      {...}, 
      ... 
      200000... 

yüzden geçici çözüm her başına ayrı dosyalar 20k yaratmaktır ama öyle değil iyi bir yol properties listeye

içinde 200K nesneleri vardır.

Bunu nasıl çözebilirim?

sayesinde

+3

Bunun yerine [akış] (https://sites.google.com/site/gson/streaming) yapabilir misiniz? Çok fazla veri var. –

+0

@ElliottFrisch Lütfen kabul etmeme izin vermek için bu yorumu yanıt olarak belirtin. Teşekkür – snaggs

cevap

4

String içine kopyalamak yerine streaming kullanmanızı öneririz.

+0

yorum olarak 1 kabul edildi. Teşekkürler – snaggs

+0

Sadece farklı özelliklere sahip ve 10 milyon kayıt listesi olan bir nesne varsa nasıl akabilirim? – Coded9

0

kerede içinde her şeyi okumak ve hafızada tutmak için çok fazla veri yok. Onu daha küçük parçalara ayırmalı ve parçalara ayırmalısınız.

3

Gson streaming API nolu verileri, bir kerede yüklemeye çalışmak yerine verileri yürütün (akışa almak) için kullanabilirsiniz.

İlgili konular