使用Protobuff构建器作为一般数据对象的性能分析



由于原产物是Java序列化的绝佳选择,因此我们已经广泛使用了它。另外,我们已经使用Java构建器作为一般数据对象。在检查使用消息构建器构造对象的速度,形成实例参数和形成对象的正常Java原始词时,我们发现,对于包含6个原始字段的对象,使用构建器构造对象(这是对象的参数)花了1.1毫秒,而使用Java原始图仅花了0.3ms!以及其中50个领域的清单!建筑商是否将其用作通用数据对象会影响构建速度?

以下是我用于分析的样本设计,

message PersonList
{
   repeated Person = 1; 
    message Person 
    {
         optional string name = 1;
         optional int32 age = 2;
         optional string place = 3;
         optional bool alive = 4;
         optional string profession = 5;
    }
}       
The java equivalent 
Class PersonList {
     List<Person> personList;
     Class Person {
         String name;
         int age;
         String place;
         boolean alive;
         String profession;
     }
    /* getters and setters*/
}  

我很难想象任何只包含" 6个原始值"的东西可能需要7ms才能构造。这可能是应占用的100,000倍。所以我不确定我知道你在做什么。

也就是说,由于多种原因,Protobuf建筑商确实比典型的Pojo更为复杂。例如,Protobuf对象跟踪当前设置了哪些字段。另外,重复的原语被装箱,与Java原始数组相比,它们效率低下。因此,如果您仅衡量施工时间,您可能会看到显着差异。但是,与应用程序代码的其余时间相比,这些效果通常是无关紧要的。

最新更新