JVM
文章平均质量分 80
傻傻的笑TzT
这个作者很懒,什么都没留下…
展开
-
深入理解JAVA虚拟机读书笔记(4)
之前提到的了根搜索算法,它可以解决我们应该回收哪些对象的问题,但是它显然还不能承担垃圾搜集的重任,因为我们在程序(程序也就是指我们运行在JVM上的JAVA程序)运行期间如果想进行垃圾回收,就必须让GC线程与程序当中的线程互相配合,才能在不影响程序运行的前提下,顺利的将垃圾进行回收。 为了达到这个目的,标记/清除算法就应运而生了。它的做法是当堆中的有效内存空间(available me...原创 2018-03-23 14:04:25 · 124 阅读 · 0 评论 -
外篇:JVM类加载器机制与类加载过程
一、为什么说Java语言是跨平台的?Java语言之所以说它是跨平台的、可以在当前绝大部分的操作系统平台下运行,是因为Java语言的运行环境是在Java虚拟机中。 Java虚拟机消除了各个平台之间的差异,只要操作系统平台下安装了Java虚拟机,那么使用Java开发的东西都能在其上面运行。如下图所示: Java虚拟机对各个平台而言,实质上是各个平台上的一个可执行程序。例如在window...转载 2018-06-27 18:06:00 · 222 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(16)
这一节内容是对深入理解Java虚拟机的第7章和部分第6张总结。Class字节码内容 JVM运行时数据区内容PC、虚拟机栈、本地方法栈、堆、方法区 PC: 即程序计数器,是一块很小的内存空间,存储了下一条西药执行的字节码指令的地址。每个线程的PC记录了当前线程要执行的指令,每个线程都有自己的PC,如果执行的是本地方法,则PC为空。 虚拟机栈: ...原创 2018-06-27 16:22:46 · 179 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(15)
这一大节主要讲的是方法表——转载自:https://blog.csdn.net/luanlouis/article/details/411136951.概述 方法表集合是指由若干个方法表(method_info)组成的集合。对于在类中定义的若干个,经过JVM编译成class文件后,会将相应的method方法信息组织到一个叫做方法表集合的结构中,字段表集合是一个类数组结构,如下图所示:2....转载 2018-06-14 11:16:23 · 316 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(14)
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路。但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的。 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成《Java虚拟机原理图解》...转载 2018-06-05 13:39:47 · 206 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(13)
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了。现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志、类索引、父类索引、接口索引集合。1. 访问标志、类索引、父类索引、接口索引集合 在class文件中的位置 好,让我们来一一击破它们,看看它们到底是什么东西。2. 访问标志(access_flags)能够表示什么? 访问标志...转载 2018-06-04 21:00:00 · 162 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(12)
NO9.类中引用到的field字段在常量池中是怎样描述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言,我们在定义类的过程中会定义一些 field 字段,然后会在这个类的其他地方(如方法中)使用到它。有可能我们在类的方法中只使用field字段一次,也有可能我们会在类定义的方法中使用它很多很多次。 举一个简单的例子,我们...转载 2018-06-04 20:58:18 · 101 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(11)
这一篇讲的是常量池内容,直接开始干货吧。NO1.常量池在class文件的什么位置? 看一下之前class的文件结构,在class文件中的魔数、副版本号、主版本之后,紧接着就是常量池的数据区域了,如下图用红线包括的位置: 知道了常量池的位置后,然后让我们来揭秘常量池里究竟有什么东西吧~ NO2.常量池的里面是怎么组织的? 常量池的组织很简单,前端的两...转载 2018-06-04 20:56:47 · 132 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(10)
因为刚换公司不久,需要赶紧适应公司,导致有一段时间没写了,6月份开始要继续JVM学习之路了。之前看完了JVM内存结构的一些知识,那接下来这篇本打算自己写写Class文件结构和分析,但发现了一篇大神的博客之后,LZ觉得已经写得非常好了,只能膜拜了。好的东西当然要多转发多分享。之前有朋友老说不知道怎么学,其实网上说的方式很多很多,只要找到一条自己觉得适合的,提升快的,就是好得学习方法。就LZ来...转载 2018-06-04 20:47:43 · 167 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(8)
这节主要介绍JDK bin下的一些虚拟机性能监控与故障处理的工具,接下来直接进入主题。 在bin中比较常见的工具有一下几种: 1.jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 2.jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 3.jinf...原创 2018-03-29 16:56:38 · 282 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(7)
这节简单聊一聊对象内存分配。 之前讲过Java堆中可以细分为:新生代和老年代;再细致一点的有Eden空间、 From Survivor空间、 To Survivor空间等。而对象内存分配大方向上就是在堆上分配。对象主要分配在新生代的Eden区,少数也可能直接分配到老年代中。 首先了解下Minor GC和Full GC。 新生代GC(Minor GC):指发生在新生代的垃圾...原创 2018-03-28 10:06:05 · 145 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(9)
上节主要介绍JDK bin下的一些虚拟机性能监控与故障处理的工具,本节将介绍JDK的可视化工具JConsole。除了JConsole以外还有可视化工具Visual VM,这里就不在介绍了,可以参考书本。 JConsole(Java监视与管理的工具):直接执行bin下jconsole.exe后会自动搜索本级运行的所有虚拟机进行,不需要jps来查询。界面具体如下所示 ...原创 2018-04-08 15:43:10 · 205 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(6)
这节主要整理垃圾回收器的一些参数说明 垃圾搜集器选择参数: UseSerialGC:开启此参数使用serial & serial old搜集器(client模式默认值)。 UseParNewGC:开启此参数使用ParNew & serial old搜集器(不推荐)。 UseConcMarkSweepGC:开启此参数使用ParN...转载 2018-03-27 11:42:18 · 139 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(5)
上一节介绍的是垃圾回收算法,这一节介绍垃圾搜集器。何为垃圾收集器,其实就是讲之前的垃圾回收算法通过编程语言实现出来。 在介绍下面的回收器之前,先来接收两个概念,并发、并行、吞吐量: 并行:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发:指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个C...原创 2018-03-27 09:48:45 · 211 阅读 · 1 评论 -
深入理解JAVA虚拟机读书笔记(3)
在上篇文章介绍了即使在可达性分析算法中不可达的对象,也并非是非死不可的。事实上,第一次不可达的时候是被判处缓刑,真正要宣告一个对象死亡,至少要经过两次标记的过程。如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。 当对象没有覆盖finalize()方法,或者finalize()...原创 2018-03-20 16:49:53 · 238 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(2)
对于垃圾收集(GC)来说,主要思考一下三个问题: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 这节这里大致介绍下第一个问题,另外两个问题在以后的博客中会给出。 那么哪些内存需要回收呢?这里我们了解一个算法:引用计数算法。 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时...原创 2018-03-20 16:24:27 · 159 阅读 · 0 评论 -
深入理解JAVA虚拟机读书笔记(1)
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 下面介绍下内存中各个数据区: PC寄存器/程序计数器(线程私有): 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器 JAVA虚拟机栈(线程私有): 生命周期与线程相同,即创建线程的同时创建的,用于存放栈帧。栈帧是一个方法在执行...原创 2018-03-20 15:11:09 · 330 阅读 · 0 评论 -
外篇:JVM机器指令集
1. Java虚拟机对运行时虚拟机栈(JVM Stack)的组织 Java虚拟机在运行时会为每一个线程在内存中分配了一个虚拟机栈,来表示线程的运行状态和信息,虚拟机栈中的元素称之为栈帧(JVM stack frame),每一个栈帧表示这对一个方法的调用信息。如下所示:上述的描述可能会有点抽象,为了给读者一个直观的感受,我们定义一个简单的Java类,然后执行这个运行这个类,逐步分析整个Java...转载 2018-06-27 18:14:06 · 314 阅读 · 0 评论