程序人生——Java使用关于性能和效率的建议

在这里插入图片描述

引出

程序人生——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 -XX:ParallelGCThreads=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进阶(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使用关于性能和效率的建议

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 全国计算机等级考试二级教程——java语言程序设计的PDF版本是一本介绍Java编程语言的教程书籍。这本书对于计算机等级考试二级的学习者来说非常有用。 Java语言是一种通用的高级编程语言,它被广泛应用于跨平台应用程序的开发。这本教程主要围绕Java语言的程序设计展开,内容包括Java语言的基础知识、面向对象编程、异常处理、文件IO操作、多线程编程、网络编程等。 这本教程通过分章节详细介绍了Java语言的各个方面,从基础知识开始,逐渐深入,适合初学者学习。每个章节都通过理论讲解和实践代码演示相结合的方式,让读者能更好地理解和运用所学知识。 此外,这本教程还提供了丰富的练习题目和编程实践,帮助读者巩固所学内容,并提升编程能力。同时,书中还包含了考试相关的重点知识点和实例,能够帮助读者更好地应对全国计算机等级考试二级的相关题目。 总体来说,全国计算机等级考试二级教程——java语言程序设计PDF是一本很好的学习工具,适合计算机等级考试二级的学习者使用。无论是想了解Java编程语言的基础知识,还是为计算机等级考试二级做准备,这本教程都能够提供相应的帮助。 ### 回答2: 《全国计算机等级考试二级教程——Java语言程序设计PDF》是一本关于Java语言程序设计的考试教材。该书内容分为几个主要部分: 首先,该书从Java语言的基础知识入手,介绍了Java的背景和特点,以及Java的安装与配置。 其次,该书详细讲解了Java程序的编写与运行。从编写一个简单的Hello World程序开始,逐步引导读者学习Java的语法规则、基本数据类型、运算符以及控制结构等。 然后,该书介绍了一些常用的Java类库和API,如String类、Math类、Scanner类等,以及Java的面向对象编程思想和相关的概念,如类、对象、继承、封装、多态等。同时,还涉及到实例变量、类变量、方法的定义和使用等内容。 最后,该书还对异常处理、文件操作、线程编程等Java高级特性进行了简要介绍,使读者能够初步了解这些内容。 此外,该书还通过提供大量的例题和练习题,帮助读者巩固所学知识,培养解决实际问题的能力。 总结来说,这本教材是辅助学习者准备全国计算机二级考试的理想参考书籍。它详细介绍了Java语言的基础知识和应用,适合初学者入门。读者通过学习这本教材,可以系统地掌握Java语言的基本语法、面向对象编程以及高级特性,为考试做好充分准备。 ### 回答3: 全国计算机等级考试二级教程——Java语言程序设计 pdf 是一本关于Java编程语言的教材。Java作为一种高级编程语言,在计算机行业中应用广泛,掌握Java编程可以使开发人员更好地进行软件开发和系统设计。 这本教材主要分为几个部分。首先,它介绍了Java编程语言的基本概念和语法规则,例如变量、数据类型、运算符、流程控制等。通过学习这些内容,读者可以了解Java的基本特点和编程规范。 其次,教材详细介绍了Java的面向对象编程(OOP)思想和相关的知识。面向对象编程是现代软件开发中的一种重要方法,它通过封装、继承和多态等机制,使得程序更易读、易维护、易扩展。读者将学习如何定义类、创建对象、定义方法和属性等。 此外,教材还介绍了Java中常用的类库和API,包括输入输出流、字符串处理、异常处理、图形界面等。这些类库和API提供了大量的功能和工具,可以帮助开发人员更加高效地编写程序。 在教材的最后,还有一些实例和练习题供读者巩固所学知识。通过实际的编程实例和练习,读者可以提高自己的编程能力和解决问题的能力。 总之,全国计算机等级考试二级教程——Java语言程序设计 pdf 是一本很好的学习资料,对于想要学习Java编程的人来说,是一本不可或缺的参考书。通过学习这本教材,读者可以系统地了解和掌握Java编程的基础知识和技能,为将来的职业发展打下良好的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arya's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值