JVM
文章平均质量分 86
Hello Guava
坚持写一些JAVA、大数据相关的博文,有助于自己工作、学习、成长!
展开
-
JVM(五):垃圾回收
判断算法引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不可能再被使用的。优点:实现简单,判断效率高,大部分情况下都是很不错的算法缺点:很难解决对象之间的相互循环引用的问题。可达性分析法通过一系列的名为“GCRoot”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GCRoot没有任何引用链相连(就是从GCRoot到这个对象不可达)时,则原创 2020-08-13 10:37:37 · 140 阅读 · 0 评论 -
JVM(四):认识运行时数据区
前言:前面讲了,一个JVM主要由三个部分组成,前面我已经讲了执行引擎和类加载子系统,在这篇中就详细说下运行时数据区。总体认识下运行时数据区jdk1.7之前,HotSpot虚拟机对于方法区的实现称之为“永久代”, Permanent Generation 。jdk1.8之后,HotSpot虚拟机对于方法区的实现称之为“元空间”, Meta Space 。方法区存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等等。JDK1.8及以后不再有方法区,原方法区存储的信息被分成两部分:原创 2020-08-12 07:43:03 · 254 阅读 · 0 评论 -
JVM(三):认清类加载子系统
前言:首先得了解类加载的一个总过程,见下图,然后我们再对每个过程中的细节拆分说明类加载过程加载这一步主要就靠类加载器去加载我们的class文件,具体流程:1)通过一个类的全限定名来获取此类的二进制流。2)将这个字节流的静态存储结构转化为方法区的运行时数据结构。3)在内存中创建一个 java.lang.Class 对象,作为方法区该类的各种数据的访问入口。其中注意点:非数组类的加载时通过类加载器来完成,而数组类本身是由java虚拟机直接创建,但是数组中元素的类型最终还是要靠类加载器创建。Ho原创 2020-08-11 22:34:59 · 161 阅读 · 0 评论 -
JVM(二):认识class文件
前言:class文件是一个16进制的文件,可以通过Hex Editor工具打开,打开后如下:注:提供两个文档帮助我们阅读class文件十六进制转字符串进制转换(16进制转10进制)概述我们先对这个class文件有个总体的了解魔数所有的由Java编译器编译而成的class文件的前4个字节都是“0xCAFEBABE”。它的作用在于:当JVM在尝试加载某个文件到内存中来的时候,会首先判断此class文件有没有JVM认为可以接受的“签名”,即JVM会首先读取文件的前4个字节,判断该4个字节是原创 2020-08-10 10:55:37 · 243 阅读 · 0 评论 -
JVM(一):初识JVM
JVM架构理解一张图,讲的很清晰,jvm主要包括了类加载器、运行时数据区、执行引擎程序的执行过程首先得知道我们的java程序写好之后是如何执行的?java代码先被编译成字节码文件,也就是.class文件,我们的JVM只认识字节码文件,它会将我们的字节码文件编译成机器码文件,而这个机器码文件才是电脑CPU能直接读取运行的指令。在这过程中,JVM帮我们屏蔽了不同操作系统间的差别,所以我们只要一次编译,只要有.class文件,就能实现在不同平台上的运行。具体的过程如下:.class文件比类加载器加原创 2020-08-07 15:41:10 · 294 阅读 · 0 评论 -
JVM汇总篇
前言:以前只是在空闲的时候对JVM做一些零散的学习,比如今天看了下堆栈的区别,明天看了下常量池的知识,过两天又看了下双亲委派机制,在过段时间又看了内存模型相关的…每次都是这样东一榔头西一棒,没有经过系统的学习JVM相关知识,没有做过一些总结,没有在整体层面上去看待JVM,也没有具体到某个知识点的深度。所以这次决定花点时间做一个全面的整理和总结,结合书上看到的,结合其他大佬的见解,再综合自己的理解,写一个JVM的系列博客。这个汇总篇主要是 一些跳转链接...原创 2020-08-07 15:47:49 · 277 阅读 · 0 评论