Java 虚拟机
JVM概述、运行时数据区、类加载器、垃圾回收、性能调优
菜鸡的挣扎
人生是公平的,得到了金钱必将失去烦恼
展开
-
JVM 运行时数据区 - 多图预警、万字内存模型解读
堆和栈算是Java内存模型中最重要的两部分,栈是运行时单位(解决程序执行问题),堆是存储单位(数据存储问题)。PC 寄存器是用来存储指向下一条指令的地址,也就是即将要执行的指令代码。虚拟机栈和本地方法栈分别管理 Java 方法和本地方法。 虚拟机每调用一个方法将会在栈中压入一个对应方法的栈帧 ,内部包含局部变量表、操作数栈、动态链接和方法返回地址。-虚拟机栈存在两种常见异常 StackOverflowError 和 OutOfMemoryError 。原创 2020-10-22 13:47:08 · 182 阅读 · 0 评论 -
JVM 以及字节码文件简介 - Java虚拟机第一步
JVM 介绍众所周知,Java 是运行在 Java虚拟机上的,.java 文件只有编译成为 .class 文件才能在虚拟机上运行。那么这个虚拟机又是什么?在 CPU 层面,计算机是由一个个指令汇聚而成的,虚拟机就是将识别字节码文件,并将其转换为指令运行。Oracle 发布了一般又一般的 Java 和 JVM 规范,虚拟机就是遵循这个规范运行。规范的话全英文的,我是看不懂,有兴趣自己取:https://docs.oracle.com/javase/specs/index.html既然 JVM原创 2020-09-22 19:23:12 · 313 阅读 · 0 评论 -
类加载机制 - Java虚拟机第二步
类加载机制概述本文所有代码和介绍,基于 JDK 1.8.0.25还是放上这个最眼熟的图,这个针对 hotspot 虚拟机所绘制的简图:本文要介绍的就是这个图中的 类加载器 ,主要内容包括类加载器的工作步骤,内部组成等。对于类加载器的内部结构,先看下面这个图:类加载器会把 .class 字节码加载到运行时数据区的方法区。除了类的信息外,方法区还存放着运行时常量池信息(版本、字段、方法、接口啥的)。class 文件生命周期从上面的图中可以看出:.class 文件在类加载器的执行过程原创 2020-09-25 14:52:24 · 189 阅读 · 0 评论 -
Java 垃圾回收算法和概念 - JVM秃头第五弹
垃圾回收概述终于学到垃圾回收(Garbage Collection)了。。。把这部分干掉,后面的就是调优了。。。总算要把 JVM 部分搞完了。。好嘞,开始开始,gogogo首先,第一个问题是:JVM 中,什么是垃圾?垃圾是指在 运行程序中没有任何指针指向的对象 ,这些对象需要被回收。然后,第二个问题是:JVM 为什么需要 GC ?这个问题的解答,可以很复杂,也可以很简单。在运行时数据区篇中,已经初步对 GC 的作用进行了介绍。不论年轻代、老年代还是现在基于直接内存的元空间原创 2020-11-07 00:23:10 · 141 阅读 · 0 评论 -
垃圾收集器,GC介绍 - JVM 基础最终弹
垃圾回收器的性能指标垃圾回收的基本性能指标如下:吞吐量:运行用户代码的时间占总运行时间的比例。总运行时间 = 程序的运行时间 + 内存回收的时间暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。内存占用:Java 堆区所占的内存大小。垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例。收集频率:相对于应用程序的执行,收集操作发生的频率。快速:一个对象从诞生到被回收所经历的时间。其中比较重要的三个指标是 吞吐量 、 暂停时间 和 内存占用 ,而且 吞吐量 和 暂停时间 是原创 2020-11-09 21:25:33 · 227 阅读 · 0 评论 -
JVM 执行引擎简要介绍 - 编译器、解释器
对 JVM 而言,执行引擎就是执行代码的一个软件,所以可以不受硬件环境的约束,执行不被操作系统识别的指令集格式。JVM 的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被 JVM 所识别的字节码指令、符号表,以及其他辅助信息。原创 2020-10-24 00:08:21 · 487 阅读 · 1 评论 -
JVM 性能监控命令及工具
本文概述本文就不详细介绍了,也就列举一下常用的命令和工具。小水一篇。。。。。故障处理命令jps:虚拟机进程状况工具jps(JVM Process Tool)虚拟机进程状况工具,它的功能和 Unix 的 ps 命令类似:可以列出正在运行的虛拟机进程,并显示虚拟机执行主类名称(Main Class,main() 函数所在的类),以及这些进程的本地虛拟机唯一ID ( LVMID, Local Virtual Machine Identifier) 。而对本地虚拟机而言,LVMID 和进程 ID是原创 2020-11-12 22:59:28 · 143 阅读 · 0 评论