7.锁优化:锁优化的思路和方法1)减少锁持有时间,只需要在有线程安全要求的程序代码上加锁,能锁区块就不锁方法体,能用对象锁就不用类锁。2)减小锁粒度,将大对象(这个对象可能会被很多线程访问),拆成小对象,大大增加并行度,降低锁竞争。降低了锁的竞争,偏向锁,轻量级锁成功率才会提高,例如ConcurrentHashMap。3)锁分离,最常见的锁分离就是读写锁ReadWriteLock,根据功能进行分离成读锁和写锁,这样读读不互斥,读写互斥,写写互斥。即保证了线程安全,又提高了性能。4)锁粗化,通常情况下,为了保证多线程间的有效并发,会要求每个线程持有锁的时间尽量短,即在使用完公共资源后,应该立即释放锁。只有这样,等待在这个锁上的其他线程才能尽早的获得资源执行任务。但是,凡事都有一个度,如果对同一个锁不停的进行请求、同步和释放,其本身也会消耗系统宝贵的资源,反而不利于性能的优化。5)锁消除,在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作。这些锁并不是程序员所写的,有的是JDK实现中就有锁的,比如Vector和StringBuffer这样的类,它们中的很多方法都是有锁的。当我们在一些不会有线程安全的情况下使用这些类的方法时,达到某些条件时,编译器会将锁消除来提高性能。 8.CMS: CMS全称Concurrent marke sweep,中文是并发标记清除算法。CMS出现的目的是:尽可能的减少STW(stop the world)的时间。CMS工作分7步,分别是:1、初始标记;2、并行标记; 3、预清理;4、可终止预清理;5、重新标记;6、并发清理 7、并发重置。缺点:收集的堆会产生空间碎片,需要更多的CPU资源和堆空间。应用场景:应用程序对停顿比较敏感,老年对象比较多,同时应用程序运行在较大资源CPU和较大的堆的情况下使用。