![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 85
小小小金鱼
只要学不死,就往死里学!!!
展开
-
JVM系列之垃圾回收器(二)
Garbage First 收集器初始标记(Initial Marking): 标记GC Roots能够关联的对象,并且修改TAMS的值,需要暂停⽤户线程并发标记(Concurrent Marking): 从GC Roots进⾏可达性分析,找出存活的对象,与⽤户线程并发执⾏最终标记(Final Marking): 修正在并发标记阶段因为⽤户程序的并发执⾏导致变动的数据,需暂停⽤户线程筛选回收(Live Data Counting and Evacuation):对各个Region的回收价值和成本进原创 2021-02-23 16:07:31 · 225 阅读 · 0 评论 -
JVM系列之垃圾回收器(一)
经典垃圾收集器按代分新生代:Serial,ParNew,Parallel Scavenge老年代: Serial Old,CMS,Parallel Old不分代:G1,ZGC按并行/并发分并行收集器:Serial, Serial Old ,ParNew ,Parallel Scavenge, Parallel Old并发收集器:CMS, G1, ZGC并行(Parallel):描述的是多条垃圾收集器线程之间的关系,说明同⼀时间有多条这样的线程在协同⼯作,通常默认此时⽤户线程是处于等待状态。原创 2021-02-23 15:44:23 · 213 阅读 · 0 评论 -
JVM系列之垃圾回收基础
什么是垃圾对象JVM执行时是基于栈的字节码执行引擎,某方法执行时,虚拟机栈会创建一个栈帧,栈帧中存在局部变量表、操作数栈、方法出口等区域。方法执行过程中,基本数据类型存放在栈帧中,但引用类型在栈帧中存放的是一个引用,具体对象时存放在堆中,如Object o = new Object(),就有一个引用o指向堆中的对象。方法执行完成后,栈中的对象随着栈帧运行结束而被回收,⽽在此过程中在堆中创建的对象不会被回收,从而形成“垃圾”。再看下JVM数据共享逻辑图,可以看出指向堆中一共有几块区域,线程私有的程序计数原创 2021-02-23 11:07:38 · 261 阅读 · 1 评论 -
JVM系列之类加载机制
介绍JVM类加载过程分为五个部分:加载-连接-初始化-使用-卸载,其中“连接”阶段包括:“校验”、“准备”、“解析”。加载加载过程负责查找和导入class文件1、通过一个类的全限定名来获取定义此类的二进制字节流2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构3、在内存中生成一个代表这个类的java.lang. Class对象,作为方法区这个类的各种数据的访问入口。问题:ClassLoader.load() 与Class.forName()区别?相同点:都可以动态加载类原创 2021-02-19 15:04:12 · 285 阅读 · 0 评论 -
JVM系列之双亲委派模型
双亲委派模型JVM提供了3种类加载器:•启动类加载器(Bootstrap ClassLoader):负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。•扩展类加载器(Extension ClassLoader):负责加载 JAVA_HOME\lib\ext 目录中的,或通过java.ext.dirs系统变量指定路径中的类库。•应用程序类加载器(Application ClassLoader):负原创 2021-02-10 10:36:14 · 371 阅读 · 0 评论 -
JVM系列之ClassLoader
类加载器介绍类加载器负责加载JAVA类的字节码到JAVA虚拟机中,可理解成JVM和字节码代码的桥梁,可以根据指定的类名(如java.lang.Object)来装载class文件的内容到Runtime data area 中的 method area( 方法区域)。从JVM的角度讲,主要有两种类型加载器:启动类加载器和所有其它的类加载器。启动类加载器是JVM实现的一部分,使用C++语言实现,其它类加载器都由java语言实现,独立于虚拟机外部,并且全部继承抽象类java.lang.ClassLoader。原创 2021-02-10 10:28:16 · 418 阅读 · 2 评论 -
JVM系列之运行时数据区与内存异常演示
JVM概述JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。众所周知,java是跨平台语音,重点就在这,是通过JVM实现跨平台的,原创 2021-02-09 16:19:51 · 450 阅读 · 1 评论