簡體   English   中英

使用GSON的Java堆空間

[英]Java heap space with GSON

我正在使用GSON創建一些大的JSON文件,以便從GTFS(Google Transit)創建自定義JSON。 問題是當我從對象類轉換為JSON時:

  Gson gson = new Gson();
  String rutasJSON = gson.toJson(my_object);

它給出了以下異常:

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:544)
    at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:387)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:402)
    at com.google.gson.internal.bind.TypeAdapters$13.write(TypeAdapters.java:353)
    at com.google.gson.internal.bind.TypeAdapters$13.write(TypeAdapters.java:337)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
    at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:105)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
    at com.google.gson.Gson.toJson(Gson.java:586)
    at com.google.gson.Gson.toJson(Gson.java:565)
    at com.google.gson.Gson.toJson(Gson.java:520)
    at com.google.gson.Gson.toJson(Gson.java:500)
    at transporte.main(transporte.java:152)

我試圖從此更改eclipse.ini:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m

對此:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
1024M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx512m

有任何想法嗎?

除了調整JVM外,最好使用流API而不是在編寫之前將整個json加載到內存中。

看看https://sites.google.com/site/gson/streaming上的“混合寫示例”

我認為您不應該調整eclipse.ini因為這會影響Eclipse程序的JVM設置。 我想您的程序啟動了另一個JVM,您應該設置該JVM的內存設置。 請參閱Eclipse中程序的“運行配置”。

問題不在於運行eclipse(通過eclipse.ini控制)的JVM的內存不足,而是用於運行程序的單獨JVM的內存不足。

如果使用1.5客戶端JVM,我認為標准最大內存設置( -Xmx )為64 MB。

為了更改最大內存,請執行以下操作:

  • 右鍵單擊“運行方式...”或“調試方式...”,然后
  • 然后“運行配置”或“調試配置”
  • 然后單擊參數選項卡
  • 然后將-Xmx512m添加到“ VM參數”
  • 然后點擊運行

如果仍然沒有足夠的內存,請增加內存量。

我認為您的Eclipse中運行的JVM內存不足,因此您必須增加JVM的大小。要更改Eclipse的VM,可以從Windows>首選項> Java>已安裝的JRE中更改MV的數量,從中選擇JRE並單擊編輯,然后將默認VM參數寫入:-Xmx1024M或任何其他內存量。

參考此鏈接,您有一個主意

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM