步伐人生——Java利用关于性能和效率的建议

打印 上一主题 下一主题

主题 564|帖子 564|积分 1692



  
引出

步伐人生——Java利用关于性能和效率的建议

性能和效率

建议132:提拔Java性能的基本方法



  • 如何让Java步伐跑的更快、效率更高、吞吐量更大:1、不要在循环条件中计算,每循环一次就会计算一次,会低落体系效率;2、尽可能把变量、方法声明为final static范例,加上final static修饰后,在类加载后就会生成,每次方法调用则不再重新生成对象了;3、缩小变量的作用范围,目的是加速GC的接纳;4、频繁字符串操纵利用StringBuilder或StringBuffer5、利用非线性检索,利用binarySearch查找会比indexOf查找元素快许多,但是利用binarySearch查找时记得先排序;6、覆写Exception的fillInStackTrace方法,fillInStackTrace方法是用来记录异常时的栈信息的,这是非常耗时的动作,如果不需要关注栈信息,则可以覆盖,以提拔性能;7、不创建冗余对象
建议133:若非须要,不要克隆对象



  • (克隆对象并不比直接生成对象效率高)(通过clone方法生成一个对象时,就会不再实行构造函数了,只是在内存中进行数据块的拷贝,看上去似乎应该比new方法的性能好许多,但事实上,一样平常情况下new生成的对象比clone生成的性能方面要好许多。JVM对new做了大量的系能优化,而clone方式只是一个冷僻的生成对象的方式,并不是主流,它主要用于构造函数比较复杂,对象属性比较多,通过new关键字创建一个对象比较耗时间的时候
建议134:保举利用“望闻问切”的方式诊断性能



  • 性能诊断遵照“望闻问切”,不可过度急躁
建议135:必须定义性能衡量标准



  • 原因:

    • 1、性能衡量标准是技能与业务之间的契约;
    • 2、性能衡量标志是技能优化的目标

建议136:枪打出头鸟—解决首要体系性能问题



  • 解决性能优化要“单线程”小步进步,避免关注点过多而导致精神分散)(解决性能问题时,不要把全部的问题都摆在面前,这只会“扰乱”你的思维,集中精神,找到谁人“出头鸟”,解决它,在大部门情况下,一批性能问题都会迎刃而解
建议137:调整JVM参数以提拔性能



  • 四个常用的JVM优化本领:

    • 1、调整堆内存巨细,JVM两种内存:栈内存(Stack)堆内存(Heap)栈内存的特点是空间小,速度快,用来存放对象的引用及步伐中的基本范例;而堆内存的特点是空间比较大,速度慢一样平常对象都会在这里生成、利用和消亡。栈空间由线程开发,线程结束,栈空间由JVM接纳,它的巨细一样平常不会对性能有太大影响,但是它会影响体系的稳定性,高出栈内存的容量时,会抛StackOverflowError错误。可以通过**“java -Xss ”设置栈内存巨细来解决。堆内存的调整不能太随意,调整得太小,会导致Full GC频繁实行,轻则导致体系性能急速下降,重则导致体系根本无法利用;调整得太大,一则浪费资源(若设置了最小堆内存则可以避免此问题),二则是产生体系不稳定的情况,设置方法“java -Xmx1536 -Xms1024m”**,可以通过将-Xmx和-Xms参数值设置为相同的来固定堆内存巨细;
    • 2、调整堆内存中各分区的比例,JVM的堆内存包括三部门:新生区(Young Generation Space)、养老区(Tenure Generation Space)、永久存储区(Permanent Space 方法区),此中新生成的对象都在新生区,又分为伊甸区(Eden Space)、幸存0区(Survivor 0 Space)和幸存1区(Survivor 1 Space),当在步伐中利用了new关键字时,首先在Eden区生成该对象,如果Eden区满了,则触发minor GC,然后把剩余的对象移到Survivor区(0区或者1区),如果Survivor取也满了,则minor GC会再接纳一次,然后再把剩余的对象移到养老区,如果养老区也满了,则会触发Full GC(非常危险的动作,JVM会克制全部的实行,全部体系资源都会让位给垃圾接纳器),会对全部的对象过滤一遍,检查是否有可以接纳的对象,如果还是没有的话,就抛出OutOfMemoryError错误。一样平常情况下新生区与养老区的比例为1:3左右,设置命令:“java -XX:NewSize=32m -XX:MaxNewSize=640m -XX:MaxPermSize=1280m -XX:NewRatio=5”,该设置指定新生代初始化为32MB(也就是新生区最小内存为32M),最大不高出640MB,养老区最大不高出1280MB,新生区和养老区的比例为1:5.一样平常情况下Eden Space : Survivor 0 Space : Survivor 1 Space == 8 : 1 : 1);
    • 3、变更GC的垃圾接纳策略,设置命令“java -XX:+UseParallelGC -XXarallelGCThreads=20”,这里启用了并行垃圾收集机制,并且定义了20个收集线程(默认的收集线程便是CPU的数量),这对多CPU的体系时非常有帮助的,可以大大淘汰垃圾接纳对体系的影响,进步体系性能;
    • 4、更换JVM,如果全部的JVM优化都不见效,那就只有更换JVM了,比较流行的三个JVM产品:Java HotSpot VM、Oracle JRockit JVM、IBM JVM。

建议138:性能是个大“咕咚”



  • 1、没有慢的体系,只有不满足义务的体系;
  • 2、没有慢的体系,只有架构不良的体系;
  • 3、没有慢的体系,只有懒惰的技能人员;
  • 4、没有慢的体系,只有不乐意投入的体系
深入熟悉JVM

JVM内存分配,类加载

Java进阶(1)——JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

创建对象的4种方法总结

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

垃圾接纳GC


Java进阶(垃圾接纳GC)——理论篇:JVM内存模型 & 垃圾接纳定位打扫算法 & JVM中的垃圾接纳器
简介:本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变革;介绍了垃圾接纳的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾打扫算法;然后介绍了Java中的垃圾接纳器,由串行、到并行再到并发,末了到G1的演变;末了给出了垃圾接纳器的对比和利用指引。
JVM调优,Arthas利用



  • Java进阶(JVM调优)——阿里云的Arthas的利用 & 安装和利用 & 死锁查找案例,重新加载案例,慢调用分析
  • Java进阶(JVM调优)——JVM调优参数 & JDK自带工具利用 & 内存溢出和死锁问题案例 & GC垃圾接纳



熟悉多线程

创建多线程方法+了解线程池

Java进阶(5)——创建多线程的方法extends Thread和implements Runnable的对比 & 线程池及常用的线程池

多线程下-1非原子性问题即解决

Java进阶(6)——抢购问题中的数据不安全(非原子性问题)& Java中的synchronize和ReentrantLock锁利用 & 死锁及其产生的条件

再论线程,创建、生命周期

Java进阶(再论线程)——线程的4种创建方式 & 线程的生命周期 & 线程的3大特性 & 聚集中的线程安全问题
主要内容:
1.线程创建的方式,继承Thread类,实现Runable接口,实现Callable接口,采用线程池;
2.线程生命周期: join():运行结束再下一个, yield():临时让出cpu的利用权,deamon():守护线程,末告终束,sleep():如果有锁,不会让出;
3.线程3大特性,原子性,可见性,有序性;
4.list聚集中线程安全问题,hash算法问题;

总结

步伐人生——Java利用关于性能和效率的建议

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表