java性能调优

String
1、当需要使用字符串拼接时,我们需要显示的使用StringBuilder ,这样可以避免每次使用的时候都创建一个StringBuilder 对象。
2、给字符串进行赋值的时候我们可以使用.intern进行赋值,这样如果字符串常量池中有这个字符串,可以直接返回该字符串对象的引用,从而节省空间。当然你也可以显示的将一些常用的字符串单独抽出来一个对象,这样也可以避免空间的浪费。但是也需要考虑实际的业务场景,因为常量池类似于HashMap里面存储的数据越多,那么遍历它锁需要花费的时间就越长。

SharedLocation sharedLocation = new SharedLocation();sharedLocation.setCity(messageInfo.getCity().intern()); sharedLocation.setCountryCode(messageInfo.getRegion().intern());sharedLocation.setRegion(messageInfo.getCountryCode().intern());Location location = new Location();location.set(sharedLocation);location.set(messageInfo.getLongitude());location.set(messageInfo.getLatitude());

3、在业务允许的情况下,字符串的分隔尽量使用String.indexOf(),而不要使用 Split() ,因为Split容易引起字符串的回溯问题。

正则表达式
1、独占模式
同贪婪模式一样,独占模式一样会最大限度地匹配更多内容;不同的是,在独占模式下,匹配失败就会结束匹配,不会发生回溯问题。还是上边的例子,在字符后面加一个“+”,就可以开启独占模式。text=“abbc”regex=“ab{1,3}+bc”
这样就可以避免字符串的回溯问题。
2、少用贪婪模式,多用独占模式贪婪模式会引起回溯问题,我们可以使用独占模式来避免回溯。前面详解过了,这里我就不再解释了。
3、减少分支选择分支选择类型“(X|Y|Z)”的正则表达式会降低性能,我们在开发的时候要尽量减少使用。如果一定要用,我们可以通过以下几种方式来优化:首先,我们需要考虑选择的顺序,将比较常用的选择项放在前面,使它们可以较快地被匹配;其次,我们可以尝试提取共用模式,例如,将“(abcd|abef)”替换为“ab(cd|ef)”,后者匹配速度较快,因为 NFA 自动机会尝试匹配 ab,如果没有找到,就不会再尝试任何选项;最后,如果是简单的分支选择类型,我们可以用三次 index 代替“(X|Y|Z)”,如果测试的话,你就会发现三次 index 的效率要比“(X|Y|Z)”高出一些。

stream
和for循环和迭代器相对比。
串行实现

Map<String, List> stuMap = stuList.stream().filter((Student s) -> s.getHeight() > 160) .collect(Collectors.groupingBy(Student ::getSex));
并行实现

Map<String, List> stuMap = stuList.parallelStream().filter((Student s) -> s.getHeight() > 160) .collect(Collectors.groupingBy(Student ::getSex));
在多核已经数据量比较大的时候,利用stream进行遍历效率会高一点。

HashMap的优化
1、使用红黑树,提高查询的效率
2、而在 JDK 1.8 中,HashMap 对扩容操作做了优化。由于扩容数组的长度是 2 倍关系,所以对于假设初始 tableSize = 4 要扩容到 8 来说就是 0100 到 1000 的变化(左移一位就是 2 倍),在扩容中只用判断原来的 hash 值和左移动的一位(newtable 的值)按位与操作是 0 或 1 就行,0 的话索引不变,1 的话索引变成原索引加上扩容前数组。

IO优化
我们通过NIO可以减少一次jvm的数据复制。
减少阻塞
使用 DirectBuffer 减少内存复制
通过涌道和多路复用器减少数据传输和复制时的阻塞问题。

网络通信序列化优化
FastJson、Kryo、Protobuf、Hessian可以借助这些序列化框架来完成序列,提高序列化的效率。

网络通信协议的优化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值