![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 95
详解Java虚拟机运行原理
IT李维
越努力越幸运,与君共勉。
展开
-
JVM探秘(五)-GC,如何判定对象可回收?
一、概述通过一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。如图所示:图中蓝色,代表以GC Root为根节点,路径是可达的,所以在判定时,认为蓝色是不可回收对象。图中橙色,虽然对象之间有引用,但是没有GC Roots集合中的对象关联,所以在判定时会原创 2021-01-27 10:31:35 · 708 阅读 · 8 评论 -
JVM探秘(四)-Java虚拟机性能监控工具详解
一、概述jps(JVM Process Status Tool):可以列出正在运行的虚拟机进 程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(LVMID,Local Virtual Machine Identifier)。LVMID是类似于进程号,比如我们同时运行三个Java程序,那么将会有与之对应的三个Java虚拟机实例。每一个虚拟机实例都类似于进程,有一个ID标识符。二、使用方法jps的命令格式如下:jps [ options ]原创 2021-01-21 21:49:55 · 855 阅读 · 11 评论 -
JVM探秘(三)-Java虚拟机类加载详解
小伙伴们,大家好:今天我们要介绍的内容是Java虚拟机类加载的过程,从上文《JVM系列(二)字节码文件结构(基础篇)》中我们详细的介绍了,Java源文件经过编译器编译后得到的字节码文件的内部存储细节,那么在虚拟机是如何加载并且使用这些数据结构的呢?我们一起来看看吧。从一个字节码文件被虚拟机加载到内存开始,到卸载出内存为止,它整个生命周期将会经历加载、加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initializati原创 2021-01-21 10:39:46 · 207 阅读 · 3 评论 -
JVM探秘(二)-字节码文件结构(基础篇)
小伙伴们,大家好:今天是JVM系列的第二篇,字节码结构详解。在讲解字节码文件之前,我觉得有必要聊聊我们为什么要学习字节码。很多小伙伴可能会有这样的想法,我编程用不上字节码文件,我学它干啥?那小伙伴们想一想,在你没有学习虚拟机之前,假设你的项目再线上遇到一个CPU占用率高的问题,你是不是只能逛逛博客,百度,寻求问题的解决方案,但是在你学习虚拟机之后,你可能会尝试着使用jstack等故障诊断工具区排查问题。又比如在你未曾看JDK源码之前,你遇到一个异常,是否又只能去百度,但是如果你看了源码,你会想着去从源码的原创 2021-01-18 00:02:37 · 684 阅读 · 6 评论 -
JVM探秘(一)-Java虚拟机运行时数据区域详解
Hello,大家好:今天咱们来聊聊Java运行时数据区域,在我们学习Java的时候,很多人将Java的内存区域都笼统的分为堆和栈,只知道new的对象都存储在堆中,基本数据类型保存在栈中。这种想法对于初学者很合适,但是对于有一定Java编程经验的大佬们来说,可就错了。下面我们来看看Java运行时数据区域。我们先从线程私有区域进行讲解:程序计数器(pc Register):JDK官方是这样给出定义的:Java虚拟机可以同时支持多个线程执行。每个Java虚拟机线程都有自己的pc(程序计数器)寄存器。在任原创 2021-01-12 21:00:46 · 353 阅读 · 3 评论