写点什么

架构师训练营——第 9 周学习总结

用户头像
jiangnanage
关注
发布于: 2020 年 08 月 05 日

JVM 虚拟机原理

JVM 组成架构

Java 是一种跨平台的语言,JVM 屏蔽了底层系统的不同,为 Java 字节码文件构造了一个统一的运行环境。

JVM 核心组成部分:

  • 类加载器

  • 运行期数据区

  • 方法区 - 所有线程共享区域

  • 堆 - 所有线程共享区域

  • Java 栈 - 每个线程独享

  • 程序计数寄存器 - 每个线程独享

  • 执行引擎

线程工作内存 & volatile

  • 线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行。

  • 一个共享变量被 volatile 修饰之后,保证了不同对这个变量进行操作时的可见性。

JVM 垃圾回收

  • JVM 垃圾回收就是在 JVM 堆中的已经不在被使用的对象清理掉,释放内存资源;

  • JVM 通过一种可达性分析算法进行垃圾对象的识别,对被引用的对象进行标记,那些没有标记的对象就是可回收的垃圾对象了。

  • JVM 回收垃圾对象占用的资源主要有 3 种方法:1.清理 2.压缩 3.复制

  • JVM 在具体垃圾回收时会进行分代垃圾回收。具体实现:JVM 将堆空间分成新生代和老年代两个区,新建的对象都存放在新生代,当新生代空间不足时,只对新生代进行垃圾回收,这样需要处理的内存空间就比较小,垃圾回收速度就比较快。

  • 采用串行、并行、并发或 G1 等算法对内存进行回收,在回收过程中会产生 STW(Stop The World)现象。

JVM 性能诊断工具

基本工具:JPS、JSTAT、JMAP、JSTACK

集成工具:JConsole、JVisualVM

Java 代码优化

合理并谨慎使用对线程

竞态条件和临界区

Java 线程安全

Java 内存泄漏

  • 如果程序保留对永远不再使用的对象的引用,这些对象将会占用并耗尽内存

  • 合理使用线程池和对象池

  • 使用合适的 JDK 容器类

  • 缩短对象生命周期,加速垃圾回收

  • 使用 I/O buffer 及 NIO

  • 优先使用组合代替继承

  • 合理使用单例模式

  • 计算机的任何问题都可以通过虚拟层(或者中间层)解决


用户头像

jiangnanage

关注

还未添加个人签名 2019.04.11 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营——第9周学习总结