【性能优化】Java集合总结笔记 简单优化方案

此篇文章讲之前看的集合相关内容,用自我总结的方式写出,如果有任何建议可以给我留言

1、List

    Vector和ArrayList都是基于数组实现的,区别在于Vector做了同步的处理,ArrayList则是线程不安全的。LinkedList是双向循环链表实现的。

    对于添加元素来说,如果是向尾部添加元素,由于ArrayList不需要移动数组,因此效率很高,但如果向头部添加元素,由于需要数组重排,元素位置越靠前,效率越低。LinkedList几乎在任何位置添加元素效率相同。

    对于删除性能,ArrayList删除尾部效率最高,元素位置越靠前,效率越低。LinkedList对于删除头尾两端元素效率高,中间效率低,因为LinkedList需要依次遍历,如果元素在中间,遍历次数最多。

    随机访问,ArrayList效率优于LinkedList,for循环优于迭代器优于foreach循环。如果可以直接指定容量大小,减少ArrayList的自动扩容次数,效率可以提高。

2、Map

    HashTable和HashMap都是基于链表+数组实现的。HashTable做了同步操作,HashMap没有,因此HashMap是线程不安全类。HashTable的key和Value是不允许存Null的。HashMap是高性能的,底层是native+位运算实现的,因此效率很高。

    HashMap是无序的,LinkedHashMap是有序的,它有2种排序方式,一种是基于存储顺序,另一种是基于访问顺序。

    TreeMap是基于红黑树实现的,平衡查找树查找效率优于平衡二叉树。它不同于LinkedHashMap,它是根据key来排序的,使用TreeMap必须实现Comparable 或在构造器中注入Comparator

    如果需要排序,使用TreeMap更优一些

3、Set

    就是不允许有重复元素的Map。HashMap封装为HashSet、LinkedHashMap封装为LinkedHashSet、TreeMap封装为TreeSet

4、RandomAccess接口:

    随机访问接口,基于数组实现的如ArrayList和Vector都实现了此接口,而基于链表实现LinkedList未实现此接口,因此在进行随机访问操作时,性能会相差几个数量级,是由于LinkedList在进行随机访问时需要依据元素所在位置而由前向后或从后向前遍历集合,而数组则直接通过索引下标即可找到

5、WeakHashMap:

    是弱引用一种典型的实现,可以在程序中做缓存使用,由于弱引用是GC自己释放持有资源的,因此使用WeakHashMap可以避免内存溢出,但特别注意WeakHashMap中的key不要在程序中持有强引用,否则WeakHashMap将退化为HashMap,不能由GC自动回收

最后说几个代码层面的性能提高的方法:

大原则:“减少调用次数,减少重复计算次数”

1、在进行循环中异常捕获时,应将try放在循环体外进行捕获

2、应尽量使用局部变量,因局部变量是在栈中生成的,而静态变量、实例变量、其他变量都在堆中生成,因此速度较慢

3、在可以使用位运算进行计算,优先使用位运算操作

4、尽量避免使用二维数组,用一维数组进行代替,注意减少方法调用次数有助于提高性能

5、展开循环,对于大循环体,可在循环体内一次处理多条数据,减少循环次数,有助于提高性能。例:

    for(i=0;i<size;i+=3){}

6、数组复制优先使用arrayCopy()

7、在进行Io操作时,一定要使用Buffer进行Io操作,有助于提高性能

8、Util工具类,使用静态方法替代实例方法。因为静态方法在程序运行时,全局只会生成一份在全局中是唯一的存在

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat是一个开源的Java Servlet容器,用于处理Java Servlet和JSP(Java Server Pages)请求。为了提高Tomcat的性能,我们可以采取以下一些优化措施: 1. 调整内存设置:Tomcat的性能受到内存的影响较大,可以根据服务器的硬件和预期的负载来配置JVM(Java虚拟机)的内存参数,如-Xms(初始堆大小)和-Xmx(最大堆大小)。合理配置内存可以有效地避免内存溢出和频繁的垃圾回收。 2. 合理配置线程池:Tomcat使用线程池来处理并发请求,可以通过调整线程池的大小和配置参数来提高性能。可以根据服务器的硬件配置,预估的请求数量和处理时间来合理配置线程池的大小,避免线程过多或过少的情况发生。 3. 优化静态资源的处理:静态资源(如图片、CSS和JavaScript文件)可以通过使用CDN(内容分发网络)或将其存储在独立的服务器上来提高访问速度。同时,可以启用GZIP压缩和浏览器缓存,以减少传输的数据量和渲染时间。 4. 优化数据库访问:在应用程序中,数据库访问是一个非常常见且需要优化的环节。可以使用连接池来减少数据库连接的开销,同时尽量减少不必要的SQL查询和使用合适的索引。此外,将频繁查询的数据缓存到内存中,可以大大提高性能。 5. 调整Tomcat的配置参数:Tomcat的性能也受到其自身的配置参数的影响,可以根据具体情况来调整一些重要的参数,如连接超时时间、最大请求数量、缓冲区大小等。 6. 监控和识别性能问题:在优化Tomcat性能的过程中,及时监控和识别性能问题非常重要。可以使用一些性能监控工具,如JVisualVM、JProfiler等来识别潜在的性能瓶颈和热点。 综上所述,通过调整内存设置、线程池配置、静态资源优化、数据库访问优化、调整Tomcat配置参数以及监控问题识别,我们可以有效地优化Tomcat的性能,提升应用程序的响应速度和并发处理能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值