终于有人将jvm讲清晰了,阿里架构师保举jvm架构分析文档

手机游戏开发者 2024-9-28 10:47:49 96 0 来自 中国
一、JVM 内存地区分别


  • 步伐计数器(线程私有)
步伐计数器(Program Counter Register),也有称作为 PC 寄存器。保存的是步伐当
前实行的指令的地点(也可以说保存下一条指令的地点存储单位的地点),当 CPU 必要执
行指令时,必要从步伐计数器中得到当前必要实行的指令地点存储单位的地点,然后根据得
到的地点获取到指令,在得到指令之后,步伐计数器便主动加 1 大概根据转移指针得到下
一条指令的地点,云云循环,直至实行完全部的指令。也就是说是用来指示实行哪条指令的
由于在 JVM 中,多线程是通过线程轮替切换来得到 CPU 实行时间的,因此,在任一
具体时间,一个 CPU 的内核只会实行一条线程中的指令,因此,为了可以或许使得每个线程都
在线程切换后可以或许恢复在切换之前的步伐实行位置,每个线程都必要有本身独立的步伐计数
器,而且不能相互被干扰,否则就会影响到步伐的正常实行序次。因此,可以这么说,步伐
计数器是每个线程所私有的。
在 JVM 规范中规定,假如线程实行的黑白 native 方法,则步伐计数器中保存的是当前
必要实行的指令的地点;假如线程实行的是 native 方法,则步伐计数器中的值是 undefined。
由于步伐计数器中存储的数据所占空间的巨细不会随步伐的实行而发生改变,因此,对
于步伐计数器是不会发生内存溢出征象(OutOfMemory)的。

  • 当地方法栈(线程私有)



  • 方法区*   直接内存
2.png 2.JVM 实行子体系


  • Class 类文件结构
  • 字节码指令
3.png

  • 类加载机制*   类加载器*   Tomcat 类加载机制*   方法调用详解
3.垃圾采取器和内存分配计谋


  • Java 中是值转达还是引用转达?


  • 引用范例
  • 根本垃圾采取算法
  • 分代处理垃圾
  • JAVA 中垃圾采取 GC 的范例
编写高效优雅 Java 步伐


  • 面向对象


  • 方法
1 可变参数要审慎利用
可变参数是允许传 0 个参数的
假如是参数个数在 1~多个之间的时间,要做单独的业务控制。
看代码
2 返回零长度的数组或聚集,不要返回 null
方法的效果返回 null,会导致调用方的要单独处理为 null 的情况。返回零长度,调用方可以
同一处理,如利用 foreach 即可。
JDK 中也为我们提供了 Collections.**EMPTY_LIST **如许的零长度聚集
3 优先利用标准的非常
要只管追求代码的重用,同时淘汰类加载的数目,进步类装载的性能。
常用的非常:
IlegalAraumentException -- 调用者转达的参数不合适
lllegalStateException – 吸收的对象状态不对,
NullPoint
UnsupportedOperationException –不支持的操作

  • 通用步伐设计
1 用罗列取代 int 常量
声明的一个罗列本质就是一个类,每个具体的罗列值就是这个罗列类的实例。
罗列更多作用,看代码。
2 将局部变量的作用域最小化
1. 在第一次利用的地方举行声明
2. 局部变量都是要自行初始化,初始化条件不满足,就不要声明
最小化的长处,减小局部变量表的巨细,提示性能;同时制止局部变量过早声明导致禁绝确
的利用。
3 正确盘算,制止利用 float 和 double
可以利用 int 大概 long 以及 BigDecimal
4 当心字符串毗连的性能
参考代码
com.xiangxue.ch04.StringUnion15.Test。
在存在大量字符串拼接大概大型字符串拼接的时间,只管利用 StringBuilder 和 StringBuffer
性能优化


  • 常用的性能评价/测试指标


  • 常用的性能优化本领
  • 应用服务性能优化
  • 异步


  • 集群
  • 应用相干
总结:
jvm与性能优化知识点整理,文中给各人展示了一部分,各人有必要整个pdf文件的可以
看主页简介
也可找v:yxqbkd
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-24 21:16, Processed in 0.210482 second(s), 35 queries.© 2003-2025 cbk Team.

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