怎么进行java高性能编程?

1.什么是高性能?

根据百度百科的定义,一个程序对内存和时间的需求称为程序性能。故高性能就是程序对内存的使用率低,运行时间短。

2.怎么进行java高性能编程?

两个优化指标:时间优化,空间优化。

2.1 并发编程中锁的优化与选择

并发编程中,由于cpu的三级缓存,cpu的指令重排,引发的可见性问题;JIT编译器的字节码指令重排,引发的原子性问题。故必须引用到锁的机制,来保证共享数据的安全性问题。对jvm层面,提供了synchronized关键字来保证安全性问题,由于synchronized是悲观锁,独占锁,在多线程下,synchronized同步的代码块只能有一个线程去执行,而在读多写少的场景,显然这种方式会导致时间效率低,故可使用读写锁优化。

在一些业务场景中,如StringBuffer拼接字符串,由于StringBuffer是线程安全,故在使用时,会出现大量加锁解锁过程,也会引发时间效率问题,可以使用+EliminateLocks参数进行锁削除(锁削除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行削除);在一个代码块出现大量加锁解锁操作,也会引起时间效率问题,可进行锁粗化(锁粗化就是告诉我们任何事情都有个度,有些情况下我们反而希望把很多次锁的请求合并成一个请求,以降低短时间内大量锁请求、同步、释放带来的性能损耗)

CAS机制替代锁机制,CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换。提供了CPU级别数据安全问题,使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。

2.2 网络编程优化

jdk1.4之前提供bio进行同步阻塞编程,即服务端接收客户端的连接时每次都需要一个新线程,显然对空间利用率很低;故在JDK1.4推出nio同步非阻塞编程,故一个服务端可以接收多个客户端连接;极大提到了空间利用率。而netty使用了reactor线程模型,使用异步非阻塞编程,极大提高了对数据的处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值