![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 89
但求上进
这个作者很懒,什么都没留下…
展开
-
JVM-垃圾回收器的相关概述(不断补充完善)
文章目录1、GC垃圾回收器的分类1.1、按线程数量分1.2、按工作模式1.3、按碎片处理方式1.4、按工作空间划分二、评估垃圾回收器的主要指标3、七大经典垃圾回收器(重点)概述3.1、串行回收器3.1.1、Serial3.1.2、Serial Old3.2、并行回收器3.2.1、ParNew3.2.2、Parallel Scavenge3.2.2、Parallel Old3.3、并发回收器3.3.1、CMS3.3.2、G11、GC垃圾回收器的分类1.1、按线程数量分串行垃圾回收器同一个时间段内只原创 2020-10-28 23:29:37 · 159 阅读 · 0 评论 -
JVM-垃圾回收相关概念的补充与回顾
文章目录一、System.GC的理解二、内存溢出与内存泄漏1、内存泄漏2、内存溢出三、STW概念理解四、并行和并发1、程序中的并发和并行:2、垃圾回收中的并发和并行:五、安全点与安全区域1、安全点2、安全区一、System.GC的理解在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,但是这个执行情况确实不一定执行的,也就是说我调用了System.GC方法尝试主动进行垃圾回收,这个行为是不一定执行原创 2020-10-26 14:30:09 · 144 阅读 · 0 评论 -
JVM-垃圾回收算法复习总结(超详细版)
文章目录一、垃圾回收概述1、什么是垃圾?2、垃圾回收的主要区域?二、垃圾回收算法--标记阶段1、对象存活判断之--引用计数算法2、对象存活判断之--可达性分析(根搜索)算法3、对象的finalization机制(重点)三、垃圾回收算法--清除阶段1、对象回收之-标记清除算法2、对象回收之-复制算法3、对象回收之-标记压缩算法四、三种垃圾回收算法的小结五、分代收集算法六、增量收集算法和分区算法1、增量收集算法2、分区算法一、垃圾回收概述1、什么是垃圾?● 垃圾:指的是在运行中没有任何引用的对象(没有任原创 2020-10-25 16:39:15 · 247 阅读 · 0 评论 -
JVM-运行时数据区超详细版总结(不断更新完善)
一、运行时数据区初探上几个章节简单的总结了一下类加载器子系统,接下来继续学习JVM里面的运行时数据区。首先,我们来大体的看看运行时数据区处于整个JVM里面的位置。(不同的JVM对于内存的划分存在区别,这里选用的是HotSpot虚拟机)Class文件使用类加载子系统进行加载,经过load,link,initialize三个流程,加载完以后便在内存中的方法区存放了运行实类本身,接下来需要使用执行引擎将字节码指令解释/编译为对应平台上的本地机器指令,在运行时方法区都分成哪些部分呢?大家各司其职做什么事呢?原创 2020-10-23 14:24:45 · 385 阅读 · 0 评论 -
JVM-对象的实例化内存布局与访问定位
文章目录一、对象加载的六个步骤二、对象的内存布局三、对象的访问定位一、对象加载的六个步骤补充说明:在分配内存的时候到底是通过指针碰撞的方式还是通过空闲列表的方式分配内存,是由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。关于类加载的具体流程可以看这一篇文章:类加载子系统二、对象的内存布局为了更好的了解对象,下面通过一段代码展示:customer类:public class customer { int id = 1001;原创 2020-10-23 18:01:59 · 170 阅读 · 0 评论 -
JVM-代码优化之逃逸分析
1、逃逸分析观看堆空间分配策略前面的文章提到,实例化对象和数组基本都在堆上进行内存的分配,但也有一种例外,那就是如果经过逃逸分析后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内存,也无须进行垃圾回收了。这也是最常见的堆外存储技术。逃逸分析的基本原则:1)一个对象在方法内被定义,对象只能在该方法中使用,没有被方法外调用,则认为它没发生逃逸。2)一个对象在方法内部被定义,但被方法外部引用,例如作为参数传递到其他地方,则认为他发生了逃逸。3)快速判断一个对象是否原创 2020-10-21 11:16:15 · 253 阅读 · 0 评论 -
JVM-类加载子系统-双亲委派机制
一、什么是双亲委派机制?首先我们得知道,JVM对class文件采用的是按需加载的方式进行加载,只有需要使用该类的时候才会把其class文件加载到内存中生成class对象,在这个加载的过程中,该类加载器首先把这个任务委托给他的上级类加载器,递归这个操作,直到顶级引导类启动器,如果父类加载器可以完成类的加载任务,就成功返回,如果无法完成,自己的加载器才会去加载这个类,这便是双亲委派机制。如图所示:代码演示:如下我们新建一个java.lang.String类(尝试覆盖默认核心api的String类),一个原创 2020-10-02 09:29:18 · 162 阅读 · 0 评论 -
JVM-类加载子系统-类加载器的分类
一、类加载器初探首先,JVM支持两种类型的加载器,分别为引导类加载器(BootstrapClassLoader)和自定义加载类加载器(User-DefinedClassLoader)。无论如何划分,程序中我们最常见的类加载器只有如下三种:(注意,这里的四者是包含关系,不是上下层关系,也不是子父类继承关系)但是从图中我们看到,除了引导类加载器之外,还有扩展类加载器,系统类加载器,才是我们的自定义类加载器,那么为什么说JVM支持两种类型的加载器呢?原因是因为从概念上讲,自定义类加载器一般指的是原创 2020-09-25 14:24:19 · 379 阅读 · 0 评论 -
JVM-类加载子系统-类加载器和类加载过程
先上类加载全过程的细节图:1.其中类加载子系统只负责加载Class文件,至于是否可以执行交给执行引擎Execution Engine决定然而不是每一个Class文件都可以加载执行,只有符合格式规范的Class文件才可以被加载,Class文件开头有特定的标识CA FE BA BE可以被加载到JVM虚拟机里2.加载后的类信息存放于一块称为 方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)类加载.原创 2020-09-23 18:48:35 · 409 阅读 · 0 评论 -
JVM简介
1.什么是JVM?JVM(Java Virtual Machine)就是Java虚拟机,是Java技术的核心。属于程序虚拟机,专门为执行单个计算机程序而设计,不同于对物理计算机的仿真(如VisualBox,VMware等系统虚拟机)等提供了一个完整的可运行的操作系统平台。2.JVM的作用?JVM就是二进制字节码的的运行环境,负责装载字节码到内部,解释/编译为对应平台上的机器指令(如把对应字节码文件)。特点:1、一次编译,到处运行2、自动内存管理3、自动垃圾回收功能下图为其作用的大概描原创 2020-09-21 11:40:17 · 366 阅读 · 0 评论