论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
步伐人生——Java利用关于性能和效率的建议 ...
步伐人生——Java利用关于性能和效率的建议
去皮卡多
金牌会员
|
2024-6-21 13:22:57
|
显示全部楼层
|
阅读模式
楼主
主题
564
|
帖子
564
|
积分
1692
引出
步伐人生——Java利用关于性能和效率的建议
性能和效率
建议132:提拔Java性能的基本方法
如何让Java步伐跑的更快、效率更高、吞吐量更大:
1、不要在循环条件中计算
,每循环一次就会计算一次,会低落体系效率;
2、尽可能把变量、方法声明为final static范例
,加上final static修饰后,在类加载后就会生成,每次方法调用则不再重新生成对象了;
3、缩小变量的作用范围
,目的是加速GC的接纳;
4、频繁字符串操纵利用StringBuilder或StringBuffer
;
5、利用非线性检索
,利用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
arallelGCThreads=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 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
去皮卡多
金牌会员
这个人很懒什么都没写!
楼主热帖
民间最大社区,倒闭了!
基于Kubernetes(k8s)部署Dubbo+Nacos服 ...
【必知必会的MySQL知识】⑤DQL语言 ...
如何基于 ZEGO SDK 实现 iOS 变声/混响 ...
驱动开发:内核R3与R0内存映射拷贝 ...
聊聊简单又不简单的图上多跳过滤查询 ...
Git分支
FPGA虚拟化:突破次元壁的技术 ...
【Kubernetes存储篇】StorageClass存储 ...
驱动开发:配置Visual Studio驱动开发 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表