摘要: 一、JVM 调优概述 GC 性能指标 对于 JVM 调优来说,需要先明确调优的目标。 从性能的角度看,通常关注三个指标: 吞吐量(throughput) - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。 停顿时间(latency) - 其度量标准是缩短由于垃圾啊 阅读全文
posted @ 2020-07-06 23:59 turbosha 阅读(335) 评论(0) 推荐(1) 编辑
摘要: 一、JVM CLI 工具 JDK 自带了一些实用的命令行工具来监控 JVM。 名称描述 jps 显示指定系统内所有的 HotSpot 虚拟机进程。 jstat 用于监视虚拟机运行时状态信息,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。 jmap 用于生成堆转储快照(一般 阅读全文
posted @ 2020-07-06 23:57 turbosha 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 一、类加载机制 类是在运行期间动态加载的。 什么是类加载 类的加载指的是将类的.class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class 阅读全文
posted @ 2020-07-06 23:55 turbosha 阅读(137) 评论(0) 推荐(0) 编辑
摘要: JVM 字节码 Java 之所以可以“一次编译,到处运行”,一是因为 JVM 针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class 文件)供 JVM 使用。 .class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项严格按照顺序紧凑地排 阅读全文
posted @ 2020-07-06 23:53 turbosha 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行。 一、对象活着吗 引用计数算法 给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 阅读全文
posted @ 2020-07-06 23:52 turbosha 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 一、运行时数据区域 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。如下图所示: 程序计数器 程序计数器(Program Counte 阅读全文
posted @ 2020-07-06 23:46 turbosha 阅读(144) 评论(0) 推荐(0) 编辑
摘要: JVM 能跨平台工作,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件、硬件之间的差异。 JVM 简介 计算机体系结构 真实的计算机体系结构的核心部分包含: 指令集 计算单元(CPU) 寻址方式 寄存器 存储单元 JVM 体系结构简介 JVM 体系结构与计算机体系结构相似,它的核心部分包含: J 阅读全文
posted @ 2020-07-06 23:44 turbosha 阅读(104) 评论(0) 推荐(0) 编辑