在java中存储对象状态

时间:2015-07-24 07:56:45

标签: java performance serialization hashmap

我需要在一个文件中存储数千个对象状态,在一个时间周期结束时,并在每个新周期开始时将它们恢复到主存储器中。

所以到目前为止我有两种方法可以考虑:

例如直接将这些对象存储为

class UsingClassObjects {
    private String name;
    private int age;
    private long rollNo;
    private long credits;

}

或创建一个hashMap以将状态存储为:

class UsingHashMap{
    HashMap<Integer, HashMap<String, HashMap<Long, Long>>> data = new HashMap<Integer, HashMap<String, HashMap<Long, Long>>>();

}

那么这两种方法中哪一种更好的记忆和效率呢?为什么呢?

还有更好的方法吗?

如果我使用HashMap,那么序列化对象会影响性能而不是将状态写入纯文本文件吗?

2 个答案:

答案 0 :(得分:0)

序列化对象并在File中存储比HashMap方法好得多,因为它可能是浪费。如果POJO不复杂,那么序列化/反序列化它也是微不足道的。您也可以使用数据库,这可能会有所帮助。你也可以像REDIS一样使用Cache。

答案 1 :(得分:0)

将状态存储在HashMap中不是一个好选择,因为: 1.最后它是一个对象,如果你的服务器崩溃或者你停止了JVM,它就会死掉。

  1. 如果您在HashMap中存储1000个对象,这将增加内存并且有可能出现Out of Memory问题。

  2. HashMap将为其中的每个条目对象消耗大量内存。

  3. 因此我建议使用Java Serialization来存储一个对象的状态,即使JVM关闭也会保留状态。