标签:发送请求 避免 使用情况 xmx 死锁 buffer 增删改查 处理 tostring
??我们知道JAVA语言与C语言的其中一个区别就是JVM中有垃圾回收器可以通过对运行中的对象进行判断是否存活并且将在内存中已经不在使用的对象进行回收释放其所占用的内存,而C语言需要进行手动的释放内存,1个对象的创建使用释放都需要程序进行显式的操作。当然不管是C还是JAVA都有自己适合的开发领域。
??对于代码性能优化,对于项目前期由于前期数据量并不是太大但是随着时间的推移数据量的激增,如果没有良好的编码习惯后期会带来较大的性能开销,故项目初期编码过程应养成良好的习惯避免后期繁重的codereview等。
??本篇博客将笔者在工作过程中遇到的性能瓶颈以及在其中是如何进行优化进行记录,以便后续有相关需求的小伙伴进行采纳借鉴。
***
??在JMM中(JAVA内存模型)中保存对象的开销其实是相当大的,并且JMM要求对象必须按照8个字节对齐,虽然JMM会提供对字段的重排序来避免用户随意指定对象字段的顺序以此来尝试各个字段重排达到降低整体的对象开销。但是即使是这样1个空的String对象仍然得占用 对象头(8 字节)+ 引用 (4 字节 ) + char 数组(16 字节)+ 1个 int(4字节)+ 1个long(8字节)= 40 字节 如果在程序过程中产生大量的对象无疑会加重GC的工作。因此在实际编码过程中应该避免创建大量的对象,在不影响代码可读性及程序并发问题时,应该尽可能复用已有的对象,减轻GC的压力。
final String aa = "a"
final String bb = "b"
System.err.println((aa + bb) == (aa + bb));//true
在进行大文本字符串拼接时,应该为StringBuffer,StringBuilder设置初始化容量值
***
JDK监控工具 Jconsole,jProfile,VisualVM 可以通过可视化界面查看JAVA堆内存使用情况进行判断是否需要进行代码优化。
***
如果对执行过程没有严格的串行顺序可以采用FutureTask对计算结果统一取值拼装。
***
引入缓存架构减轻数据库压力。
防止瞬间时抛出大量的异常,抛出异常会不停从堆栈内拔取异常信息,非常耗性能。
负载承受能力
??随着并发量的增加最终导致系统抛出大量的异常,整个系统处于不可用的时候。
标签:发送请求 避免 使用情况 xmx 死锁 buffer 增删改查 处理 tostring
原文地址:https://www.cnblogs.com/cjunn/p/12143511.html