JAVA代码如何优化? -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JAVA代码如何优化?

蛮大人123 2016-02-28 15:32:06 1404

1.没有被引用和没有被使用是两码事。

public List<MyConcernFriends> getConcernListByUserId(String userId) {
        List<MyBlackList> myBlackLists= this.getMyBlackListByUserId(userId);
        HashMap<String,Boolean> hash = new HashMap<String,Boolean>();
        for (MyBlackList black : myBlackLists)
        {
            hash.put(black.getBlackUserId(),true);
        }
        BSONObject query = new BasicBSONObject();
        query.put(MY_CONCERN_FRIENDS.myUserId, userId);
        DBAccessAPIHelp APIHelp = new DBAccessAPIHelp();
        List<String> jsonDataList = APIHelp.getJsonObjects(
                DBConstant.USER_INFO_SPACE, DBConstant.MY_COCERN_FRIENDS_DATA, query);
        APIHelp.freeDBConnection();
        List<MyConcernFriends> list = new ArrayList<MyConcernFriends>();
        for (String json : jsonDataList) {
            MyConcernFriends myConcernFriends = (MyConcernFriends) JacksonUtil
                    .jsonToBean(json, MyConcernFriends.class);
            if (hash.get(myConcernFriends.getFrUserId())==null){
                list.add(myConcernFriends);
            }
        }
        return list;
    }

对这一段代码如何做出优化?
尽量的在for里面少创建对象。那么如何在for里面尽量少的创建对象呢?
但是不在这里面创建,又在哪里面创建呢?
比如,在List 里面查询出了一万条数据。那么这一万条数据for循环然后json反序列化变成java bean,最后放在list里面返回出去。如果是一万条数据性能就回很低,要创建一万个对象了
这段代码该如何优化呢?

JSON Java 数据格式
分享到
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:49:39

    首先,代码这种编写方式相对来说还是比较清晰的,除了查询Json数据应该封装到DAO层去,不是对性能有极端要求,不建议做过多优化。
    但是如果真有必要,提供几个优化思路:
    1.如果你的BlackList很大,
    1.1 可以预估取出值的数量,在新建的时候可以调整capacity,甚至调整load factor,以免多次开辟内存空间;
    1.2 或者创建一次就直接进行缓存,用触发式的更新机制,避免重复创建;
    1.3 用TreeMap替代HashMap,可以略微提升查询性能,其实你这个场景完全可以用Set,可以略微减小内存开销;
    1.4 可以把这个List的Id写入到redis或者memcached中去,这样不占用本应用的内存空间。
    2.Json反序列化可以使用性能更高的类库,比如Jackson,fastjson
    3.如果你获取数据的那端可以控制,可以考虑性能更高的序列化方法,比如protobuff。
    4.查询结果的List如果数量可以预估,那么也可以设定初始的capacity。

    感觉你自己提的想要1w个对象,却不想创建1w个对象,这感觉自我矛盾的事情,貌似是没有任何办法的。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程