课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习java编程开发技术,而今天我们就通过案例分析来了解一下,java代码优化以及线程安全问题。
一、Java代码优化
合理并谨慎使用多线程
使用场景(I/O阻塞,多CPU并发)
资源争用与同步问题
java.util.concurrent
启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数
可以看到如果属于CPU密集型应用,不宜启动过多线程。多了反而容易竞争,影响执行效率,如果任务需要等待磁盘操作,网络响应,可以通过增加线程提高效率
竞态条件与临界区
在临界区中使用适当的同步就可以避免竞态条件。
二、Java线程安全
方法局部变量
局部变量存储在线程自己的栈中。
方法局部的对象引用
如果在某个方法中创建的对象不会逃逸出该方法,那么它就是线程安全的。
对象成员变量
对象成员存储在堆上。如果两个线程同时更新同一个对象的同一个成员,那这个代码就不是线程安全的。
WebServlet单实例多线程共享,需要增加锁保证线程安全。
ThreadLocal
实现:
Thread里有自己的ThreadLocalMap,ThreadLocalMap中存放这Thread的信息。
三、Java内存泄露
容易产生内存泄露部分:
长生命周期对象
静态容器
缓存
合理使用线程池:
复用线程或对象池
池管理算法
对象内容清除
合理容器类:
LinkList和ArrayList的区别及适用场景:根据随机访问和插入删除场景判断选择
HashMap的算法实现及应用场景
使用concurrent包,ConcurrentHashMap比较HashMap是线程安全特性
缩短对象生命周期
减少对象驻留内存的时间
在使用时创建对象,用完释放
创建对象的步骤(静态代码段-静态成员变量-父类构造函数-子类构造函数)
使用I/Obuffer及NIO
延迟写与提前读策略
异步无阻塞IO通信
优先使用组合代替继承
减少对象耦合
避免太深的继承层次带来的对象创建性能损失
合理使用单例模式
无状态对象
线程安全
计算机的任何问题都可以通过虚拟层(或者中间层)解决
面向接口编程
7层网络协议
JVM
编程框架
一致性hash算法的虚拟化实现
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。