我正在使用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
有什么想法吗?
答案 0 :(得分:7)
最好不要调整JVM,而是在编写之前使用流API而不是将整个json加载到内存中。
上的'混合写入示例'答案 1 :(得分:1)
我认为你不应该调整eclipse.ini
因为这会影响Eclipse程序的JVM设置。我想你的程序启动了一个不同的JVM,你应该设置那个JVM的内存设置。请参阅Eclipse中程序的“运行配置”。
答案 2 :(得分:1)
问题不在于运行eclipse的JVM(通过eclipse.ini
控制)内存不足,但用于运行程序的单独JVM内存不足。
如果您使用的是1.5客户端JVM,我认为标准最大内存设置(-Xmx
)为64 MB。
要更改最大内存,请执行以下操作:
-Xmx512m
添加到“VM参数”如果您的内存不足,请增加金额。
答案 3 :(得分:1)
我认为你在eclipse中运行的JVM内存不足。所以你必须增加JVM的大小。要更改Eclipse的VM,你可以从 Windows>更改MV的数量。偏好> Java> 从那里安装JRE选择JRE并单击编辑,然后在默认VM参数中写入:-Xmx1024M或任何其他数量的内存。
请参阅此链接,获得idea。