[英]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.