
JVM
文章平均质量分 66
@逾越
记录日常学习实验
展开
-
JVM回顾总结(面试)
讲述JVM模型首先,java文件jdk的编译,编译成class文件,通过类加载器进入jvm中,jvm分为,程序计数器,本地方法栈,虚拟机栈,方法区,堆;程序计数器:我理解的就是控制线程跳转的虚拟机栈:具有栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表、操作数栈等等。例如定义的局部变量存栈(存在栈帧中的局部变量表中),全局变量存堆;本地方法栈:和虚拟机栈一样,只不过是操作的是本地方法;方法区:是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态.原创 2022-02-16 09:58:46 · 7215 阅读 · 0 评论 -
JVM常见面试题
1.什么情况下会发生栈内存溢出。描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。java栈:Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表、操作数栈等等。当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。使用-Xss参数减少栈内存容量。定义了大量的本地变量,增大此方法帧中本地变量表的长度。2.详解JVM内存模型思路: 给面试官画一下JVM内存原创 2022-02-09 10:00:45 · 7109 阅读 · 0 评论 -
JDK动态代理和CGLIB动态代理的区别
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用InvocationHandler动态创建一个符合某一接口的的实例, 生成目标类的代理对象。如果代理类没有实现 InvocationHandler 接口,那么Spring AOP原创 2022-01-21 20:07:22 · 5505 阅读 · 0 评论 -
如何打破双亲委派机制?
1.第一次破坏由于双亲委派模型是在JDK1.2之后才被引入的,而类加载器和抽象类java.lang.ClassLoader则在JDK1.0时代就已经存在,面对已经存在的用户自定义类加载器的实现代码,Java设计者引入双亲委派模型时不得不做出一些妥协。在此之前,用户去继承java.lang.ClassLoader的唯一目的就是为了重写loadClass()方法,因为虚拟机在进行类加载的时候会调用加载器的私有方法loadClassInternal(),而这个方法唯一逻辑就是去调用自己的loadClass()。原创 2022-01-21 19:14:19 · 7432 阅读 · 1 评论 -
类加载及双亲委派模型
原创 2022-01-20 16:32:42 · 5885 阅读 · 2 评论 -
六种情况必须立即对类进行“初始化”
类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称 为连接(Linking)。初始化阶段:有且只有六种情况必须立即对类进行“初始化”1)遇到new、getstatic、putstatic或invokestati原创 2022-01-20 16:03:08 · 6075 阅读 · 0 评论 -
JVM 三色标记 增量更新 原始快照 基本概念
JVM 三色标记要找出存活对象,根据可达性分析,从GC Roots开始进行遍历访问,可达的则为存活对象我们把遍历对象图过程中遇到的对象,按“是否访问过”这个条件标记成以下三种颜色:白色:尚未访问过。黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。灰色:本对象已访问过,但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后,会转换为黑色。过程:初始时,所有对象都在 【白色集合】中;将GC Roots 直接引用到的对象 挪到 【灰色集合】中;从灰色集合中获取对象原创 2022-01-20 15:43:26 · 5653 阅读 · 0 评论 -
分代回收器(新生代、老年代、永久代的区别)
原创 2022-01-19 16:38:37 · 6463 阅读 · 1 评论 -
CMS收集器和G1收集器对比差异?
原创 2022-01-19 16:19:18 · 5601 阅读 · 0 评论 -
JAVA垃圾回收算法
四种回收算法标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。标记-复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。分代收集算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。标记-清除算法标原创 2022-01-18 21:30:30 · 5254 阅读 · 0 评论 -
Java垃圾回收机制(GC)
GC原理对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。优点:垃圾回收机制有效的防止了内存泄露,可以有效的使用可使用的内存。垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或很长时间没有用过的对象进行清除和回收。程序员不能实时的对某个对象原创 2022-01-18 20:54:57 · 5362 阅读 · 0 评论 -
JVM——HotSpot虚拟机对象
HotSpot虚拟机创建对象1.创建对象流程类加载:虚拟机遇到一条new指令时,先检查常量池是否已经加载相应的类,如果没有,必须先执行相应的类加载。分内存:接下来分配内存。若Java堆中内存是绝对规整的,使用“指针碰撞“方式分配内存;如果不是规整的,就从空闲列表中分配,叫做空闲列表方式。指针碰撞:如果Java堆的内存是规整,即所有用过的内存放在一边,而空闲的的放在另一边。分配内存时将位于中间的指针指示器向空闲的内存移动一段与对象大小相等的距离,这样便完成分配内存工作。空闲列表:如果Java原创 2022-01-18 20:07:08 · 5176 阅读 · 0 评论