![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 68
isyangwei
经常捡芝麻的人,也就失去了捡西瓜的可能性
展开
-
JVM垃圾回收器
垃圾回收器Serial回收器单线程执行垃圾收集,收集过程中会有较长的STW(Stop The World),在GC(minor gc和full gc)时工作线程不能工作。虽然STW较长,但简单、直接。新生代采用复制算法,老年代采用标记整理算法。Parallel收集器相比于Serial收集器,提升在于使用多线程来回收垃圾,会充分利用CPU,但是仍然有STW,这是jdk8默认使用的新生代和老年代的垃圾收集器。新生代采用复制算法,老年代采用标记-整理算法。ParNew收集器工作原理和Parall原创 2021-12-05 15:29:29 · 688 阅读 · 0 评论 -
JVM垃圾回收机制
垃圾回收机制对象称为垃圾的判断依据在堆空间和元空间中,GC这条守护线程会对这些空间开展垃圾回收工作,那么GC如何判断这些空间的对象是否是垃圾,有两种算法:引用计数法对象被引用,则计数器+1,如果计数器是0,那么对象将被判定为垃圾,于是被回收。但是这种算法没有解决循环依赖的对象,因此JVM目前主流的厂商没有采用这种算法。可达性分析算法 GC Roots根gc roots根节点:在对象的引用中,会有那么几种对象的变量:来自线程栈中局部变量表中的变量,静态变量,本地方法栈中的变量,这些变量被称原创 2021-12-05 15:19:47 · 564 阅读 · 0 评论 -
JVM运行时数据区及内存分配策略
运行时数据区运行时数据区也就是JVM运行时产生的数据存放的区域,这块区域就是JVM的内存区域,也称为JVM的内存模型–JMMJMM分成了以下几部分:堆空间(线程共享):存放new出来的对象元空间(线程共享):存放类元信息、类的模板、常量池、静态部分。线程栈(线程独享):存放方法的栈帧本地方法区(线程独享):本地方法产生的数据程序计数器(线程独享):配合执行引擎来执行指令内存分配策略为对象分配内存,具体的分配策略如下:Bump the pointer(指针碰撞):如果内存空间是绝对原创 2021-12-05 14:52:56 · 196 阅读 · 0 评论 -
JVM双亲委派机制
双亲委派机制介绍当类加载器进行加载类的时候,类加载器需要向上委托给上一级的类加载器,上一级继续向上委托,直到启动类加载器。启动类加载器去核心类库中找,如果没有找到该类,则继续向下委派,由下一级扩展类去扩展类库中找,如果也没有继续向下委派,直到找不到,报类未找到异常。为什么要有双亲委派机制防止核心类库中的类被随意篡改防止类的重复加载全盘委托机制当一个类被当前的ClassLoader加载时,该类中的其他类也会被当前ClassLoader加载,除非指明由其他类加载器加载。如何打破双亲委派机制原创 2021-12-05 14:36:17 · 497 阅读 · 0 评论 -
JVM组成及类加载过程
JVM组成类加载系统:负责完成类的加载,将字节码文件加载进内存(方法区)运行时数据区:在运行java程序时产生的数据会保存在运行时数据区执行引擎:执行具体的指令(代码)一个类被加载进JVM要经历那几个过程?加载:通过io流的方式把字节码文件读取到jvm(方法区)中校验:通过校验字节码文件的头四位的16进制是否是cafebabe准备:为类中的静态部分开辟空间并赋初始化值解析:将符号引用转换成直接引用(将调用方法时的字符表现形式,转换成方法对应的地址)。——静态链接初始化:为类中的静态部分原创 2021-12-05 13:55:20 · 782 阅读 · 1 评论