摘要: 查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程。如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示。 除此之外,还可以指定下面的参数自定义输出信息: 虚拟机统计信息:jstat 命令 jstat 用于观察 Java 堆信息 阅读全文
posted @ 2019-12-06 15:32 dtdyq 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 堆栈空间配置 JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError。因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要。 tips:本文所有配置,如无特别说明,均基于JDK1.8。 堆配置 我们使用 -Xms 设置堆 阅读全文
posted @ 2019-12-06 15:28 dtdyq 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收器、并行回收器、CMS 回收器、G1 回收器。 串行回收器 串行回收器是指使用单线程进行垃圾回收的回收器。因为每次回收时只有一个线程,因此串行回收器在并发能力较弱的计算机上,其专注性和独占性的特点往往能让其有更好的性能表现。 串行回收器 阅读全文
posted @ 2019-12-06 15:25 dtdyq 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 比起 Java 虚拟机的内存结构有《Java 虚拟机规范》规定,垃圾回收机制并没有具体的规范约束。所以很多时候不同的虚拟机有不同的实现方式,下面所说的垃圾回收都是以 HotSpot 虚拟机为例。 到底谁是垃圾? 要进行垃圾回收,最为重要的一个问题是:判断谁是垃圾? 联想其日常生活中,如果一个东西经常 阅读全文
posted @ 2019-12-06 15:24 dtdyq 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析、运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制。JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载。 在开始聊之前,先给大家看一道 阅读全文
posted @ 2019-12-06 15:22 dtdyq 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 1.什么是字节码? 1.1机器码 机器码(machine code)顾名思义也就是,机器能识别的代码,也叫原生码。机器码是CPU可直接解读的指令。机器码与硬件等有关,不同的CPU架构支持的硬件码也不相同。机器码是和我们的底层硬件直接打交道,现在学的人也是逐渐的变少了,如果对这个感兴趣的同学可以去学习 阅读全文
posted @ 2019-12-06 15:19 dtdyq 阅读(653) 评论(0) 推荐(0) 编辑
摘要: https://www.cnblogs.com/chanshuyi/p/jvm_serial_05_jvm_bytecode_analysis.html 阅读全文
posted @ 2019-12-06 15:17 dtdyq 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 阅读全文
posted @ 2019-12-06 15:15 dtdyq 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外。那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的。 如下图所示,编译器可以分为:前端编译器、JIT 编译器和AOT编译器。下面我们逐个讲解。 前端编译器:源代码到字节码 之 阅读全文
posted @ 2019-12-06 15:09 dtdyq 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。 为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的。 阅读全文
posted @ 2019-12-06 15:07 dtdyq 阅读(259) 评论(0) 推荐(0) 编辑
摘要: Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大。虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统。大到国际电商巨头阿里巴巴,小到无名小公司,我们均可看到 Java 的身影。 我是 2010 年开始接触 Java 语言 阅读全文
posted @ 2019-12-06 15:05 dtdyq 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待。但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRocketit、IBM J9 等等。今天我们就来简单回顾下 Java 虚拟机的发展历史。 虚拟机始祖:Su 阅读全文
posted @ 2019-12-06 15:05 dtdyq 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看。所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试。但我经过了几年的学习和实战,我发现其实学习虚拟机并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。 先聊聊我的 阅读全文
posted @ 2019-12-06 15:04 dtdyq 阅读(237) 评论(0) 推荐(0) 编辑