小编i.m*_*man的帖子

在使用protobuf进行反序列化时得到了outofmemory

我创建了一个原型如下:

syntax = "proto3";
option java_package = "cn.com.cennavi.oem.common";
option java_outer_classname = "RInfoPB";

message RInfo {
    string dataVersion = 1;
    map<string, MapValue> map = 2;
}

message MapValue {
    map<string, string> map = 1;
}
Run Code Online (Sandbox Code Playgroud)

我将数据(240mb)放在pb对象中,并将对象序列化为本地文件(590mb).大小增加了一倍.为什么会这样?

接下来,我将本地文件转换为pb对象,Xms和Xmx都是5g.最后,我得到了一个outofmemory异常.

使用有问题吗?

BTW:protobuf.jar的版本是3.6.0

请帮帮忙~~

堆栈跟踪

[root @ localhost test] #java -Xms5g -Xmx5g -jar ProtobufTester.jar /APP/midmif/out_bak/Rbeijing_dir322.rinf

?????, ?? [488] ms, ?? [621043338] ~
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at com.google.protobuf.CodedInputStream$ArrayDecoder.readStringRequireUtf8(CodedInputStream.java:845)
    at com.google.protobuf.WireFormat$Utf8Validation$2.readString(WireFormat.java:196)
    at com.google.protobuf.WireFormat.readPrimitiveField(WireFormat.java:245)
    at com.google.protobuf.FieldSet.readPrimitiveField(FieldSet.java:581)
    at com.google.protobuf.MapEntryLite.parseField(MapEntryLite.java:135)
    at com.google.protobuf.MapEntryLite.parseEntry(MapEntryLite.java:182)
    at com.google.protobuf.MapEntry.<init>(MapEntry.java:106) …
Run Code Online (Sandbox Code Playgroud)

java protobuf-java

5
推荐指数
0
解决办法
75
查看次数

标签 统计

java ×1

protobuf-java ×1