JVM
文章平均质量分 82
JVM是虚拟机的英文简称。它是java运行环境的一部分,是一个虚构出来的计算机,它是通过在实际的计算机上仿真模拟各种计算机功能来实现的
发了个版
认清真实的自己,积累更多的知识
展开
-
G1收集器概念,三色标记算法
G1垃圾两种回收模式Mixed GC:会同时对年轻代和部分的老年代进行收集全局并发标记(global concurrent marking)类似阈值当global concurrent marking 超过了这个比例 下次GC就会发生Mixed GC 当全局并发标记完其实此时就知道old区域的垃圾占比 超过改值就会发生Mixed GC也就是说当前老年代区域中的存活对象所占内存小于这个值(垃圾多于存活对象),超过了就说明改区域对象引用多于设置值就不用回收意思就是说最多能回收原创 2021-11-04 14:46:02 · 845 阅读 · 0 评论 -
G1垃圾收集器堆内存划分,垃圾收集各个阶段解析
评价系统指标重要的的两个因素意思就是说传统收集器只能在吞吐量(parallel scanvenge 收集器) 和 用户线程卡顿(CMS 收集器)取其一。而G1收集器在短时间满足最小化卡顿的同时满足高吞吐量传统垃圾收集器内存布局非G1的垃圾收集器G1垃圾收集器内存布局也就是说上图中每个颜色都是一个regions,region之间不一定连续,每个region的可能的角色有三种 eden survivor old。...原创 2020-10-28 15:04:29 · 3160 阅读 · 3 评论 -
CMS收集器详解
也就是说当业务线程在执行的时如创建对象只有在线程处于安全点和安全区域时才能触发GC 当线程没有处于安全点和安全区域 hostpot虚拟机采用的是主动式中断 。原创 2020-10-25 12:39:21 · 1753 阅读 · 4 评论 -
垃圾回收器常见参数使用以及日志分析
/** * -verbose:gc 在控制台输出GC日志 * -Xms20m JVM堆空间初始容量20m * -Xmx20m 堆空间最大20m * -Xmn10m 堆新生代最大内存空间10m * -XX:+PrintGCDetails 在控制台输出GC详细日志 * -XX:+SurvivorRatio=8 幸存者 比率=8 * 当咱们设置新生代最大内存我饿10m 幸存者比例为8时,fromsurvivor 和ToSurvivor 比例相同为1:1(如果不能整除就取近似值) 三者比例为8:原创 2020-10-22 16:18:29 · 556 阅读 · 0 评论 -
垃圾回收器原理内容解析
上述三种条件满足其一就会被回收掉方法区回收注意:系统,扩展,根类加载器全局唯一实例 也就是说 这三种加载类加载是无法被GC ,其加载的类永远不会被卸载。自定义的类加载器才会被回收,所以方法区中的类被回收条件很苛刻但是还是可能被回收...原创 2020-10-14 11:17:07 · 853 阅读 · 0 评论 -
JVM运行时内存模型详解,元空间优化,new关键字详解,堆栈溢出详解
这里写目录标题jvm运行时数据分区new 关键字创建对象的3个步骤:指针碰撞,空闲列表对象内存的布局对象的访问定位OutOfMemoryError 堆内存溢出异常StackOverflowError 虚拟机栈溢出监控工具死锁jvm运行时数据分区虚拟机栈:Stack Frame 存储栈帧程序计数器(Program Counter) 记录行号方便定位本地方法栈:主要用于处理本地方法 (c++ c 执行的内部方法)堆(Heep): JVM管理的最大一块内存空间 与堆相关的重要概念:垃圾回收器。现代几乎原创 2020-09-26 11:22:06 · 796 阅读 · 0 评论 -
解释执行与编译执行区别,栈的入栈出栈详解,寄存器与栈指令区别,透过字节码审视动态代理
解释执行与编译执行现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。所谓解释执行,就是通过解释器(类似流)来读取字节码,遇到相应的指令就去执行该指令。所谓编译执行,就是通过即时编译器(Just In Time,JIT)将字节码转换为本地机器码;现代JVM会根据代码热点来生成相应的本地机器码。栈的指令集与基于寄存器的指令集之间的关系1.JVM执行指令时所采取的方式是基于栈的指令集。2.基于栈的指令集主要的操作有入栈和出栈两种。3.基于栈的指令集的优势在于它可原创 2020-09-22 16:23:48 · 580 阅读 · 0 评论 -
字节码栈帧,方法分派,方法的overload与overwrite的区别,虚方法表注意事项
目录栈帧(stack frame)定义符号引用,直接引用五种方法调用类型非虚方法栈帧储存方法方法的分派静态分派方法的重载动态分派结论方法的重写(overWrite)重写和重载的区别虚拟机动态分派的实现静态分派和动态分派的区别虚方法表方法查看问题栈帧(stack frame)定义栈帧(stack frame):(每个栈帧都是由特定的线程执行的 不存在并发情况)栈帧是一种用于帮助虚拟机执行方法调用与方法执行的数据结构栈帧本身是一种数据结构,封装了方法的局部变量表,动态链接信息,方法的返回地址以及操作原创 2020-09-20 18:45:09 · 611 阅读 · 2 评论 -
Class文件与字节码,机器码的关系,字节码整体结构 常量池表 字段表,方法表等详解
目录class字节码示例字节码整体结构魔数(Magic Number)版本(Version)常量池(Constant Pool)例如总结Mytest1常量池对应的内容访问标志(Access Flags)当前Class名(This Class Name )父类名(super Class)接口(Interface)变量(Feilds)field countfields方法(Methods)方法表(方法数组)Code结构class字节码示例public class MyTest1 { privat原创 2020-09-13 21:34:09 · 3252 阅读 · 0 评论 -
【JVM类加载】线程上下文的类加载器及使用模式ServiceLoader(服务加载器)在SPI中的重要作用分析ServiceLoader.load(String service)源码解析
线程上下文的类加载器(setContextClassLoader)当前类加载器(Current ClassLoader)每个类都会使用自己的类加载器(即加载自身的类加载器)来去加载其他类(指的是是所依赖的类),如果classX引用ClassY,那么ClassX的类加载器就会去加载ClassY(前提是ClassY尚未加载)线程上下文类加载器(Context ClassLoader)线...原创 2019-10-17 17:51:21 · 994 阅读 · 6 评论 -
【JVM类加载】第五天:系统自带的类加载器如何加载如何自定义类加载器和 getSystemClassLoader()延伸的源码分析和分析Class.forName源码分析
系统自带的类加载器如何加载内建于JVM中的启动类加载器,会加载java.lang.classLoader以及其他平台的Java平台类,当JVM启动时,一块特殊的机器码会运行,他会加载扩展类加载器与系统类加载器,这快特殊的机器码叫做启动类加载器(Bootstrap)启动类加载器并不是java类(C++编写),而其他的加载器则都是Java类,启动类加载器是特定于平台的机器指令,它负责开启整个加...原创 2019-10-11 16:58:37 · 540 阅读 · 0 评论 -
【JVM类加载】第四天 自定义类的复杂加载以及命名空间详细学习以及总结类加载器的好处
自定义情况下类的复杂加载实例1编写对应两个类MyCat 和 MySamplepublic class MyCat { public MyCat() { System.out.println("MyCat is loaded by:" +this.getClass().getClassLoader()); }}public class MySample ...原创 2019-10-10 17:27:34 · 314 阅读 · 0 评论 -
【JVM类加载】第三天自定义类加载器相关内容,类加载器卸载相关内容
ClassLoader分析A class loader is an object that is responsible for loading classes. The class ClassLoader is an abstract class. Given the binary name of a class, a class loader should attempt to locate...原创 2019-10-09 17:47:55 · 421 阅读 · 0 评论 -
【JVM类加载】第二天类的初始化和类加载器双亲委托机制
类的加载的最终产品是位于内存中的Class对象Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法区内的数据结构的接口有两种类型的类加载器java虚拟机自带的加载器1.根类加载器(Bootstrap)2.扩展类加载器(Extension)3.系统(应用)类加载器(System)用户自定义的类加载器1.java.lang.ClassLoader的子类...原创 2019-10-08 17:33:18 · 258 阅读 · 0 评论 -
【JVM类加载】第一天类的加载,连接与初始化
类加载在java代码中,类型的加载,连接与初始化过程都是在程序运行期间完成的提供了更大的灵活性,增加了更多的可能性类加载器java虚拟机与程序的生命周期在如下几种情况下,java虚拟机将结束生命周期:执行System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误向上抛出异常抛到main入口程序终止由于操作系统出现错误而导致java虚拟机进程终止类的加...原创 2019-09-27 18:37:57 · 344 阅读 · 2 评论