JVM剖析
JVM的自我理解
LeBron.JG
这个作者很懒,什么都没留下…
展开
-
JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1
CMS收集器(低停顿),G1收集器(大容量,筛选回收),serial收集器(单线程),parNew收集器(多线程),parallel Scavenge收集器工作原理原创 2024-03-12 12:35:11 · 1339 阅读 · 0 评论 -
JVM垃圾收集算法
标记清除算法,复制算法,标记整理算法,分代收集算法原创 2024-03-12 10:10:28 · 329 阅读 · 0 评论 -
判断类是否可以被回收
3.该类对应的class 对象,没有任何地方被引用。类对象:将该类当作一个实例 :比如反射获取该类。类的实例:指new 出来的一些对象。1.该类的所有实例都被回收,2.加载该类的类加载器被回收。原创 2024-03-11 21:16:44 · 212 阅读 · 0 评论 -
判断对象是否可以被回收:引用计数法,可达性分析,finalize()判定
沿着GCroot根向下搜索,所有可以搜到的对象,都会被标记,反之,就是判定为垃圾对象。遍历内存中的所有变量,静态变量,然后将该变量当作GCroot根,此类对象是指,在进行可达性分析后,未被GCroot根标记的对象。java 有四种引用类型,强引用,软引用,弱引用,虚引用。②软引用:当GC完后,若内存还是满,则会将弱引用对象回收。②,若有,则判断有没有与GCroot根上的对象引用。对象每次被赋值给变量时,该对象的计数+1,若将该变量置为null,则该对象的计数-1。若该对象的计数器为0 ,则该对象就会。原创 2024-03-11 21:07:15 · 306 阅读 · 0 评论 -
JVM内存分配与回收策略
【代码】JVM内存分配与回收策略。原创 2024-03-11 20:51:20 · 317 阅读 · 0 评论 -
JVM运行模式-解释模式和编译模式,逃逸分析
当一个对象在方法中被定义后,判断是否会被其他方法引用,若被引用,则放堆内存,否则放战针中,若栈帧中放不下,还是会放到堆中。3.混合模式:少数热点代码进行编译模式,其余是解释模式。1.解释模式:运行过程中进行编译一行,执行一行。2.编译模式:一次性编译成机器码,再执行。编译后的机器码文件很大,占用特别多内存。分析对象的动态作用域。JVM参数:默认开启。原创 2024-03-09 10:55:55 · 368 阅读 · 0 评论 -
JVM内存模型-堆
堆的作用:用来存放对象。原创 2024-03-09 10:24:41 · 897 阅读 · 0 评论 -
JVM内存模型-本地方法栈
使用:去调用C语言的函数库,即后最为 .dll 文件为C语言的函数库。原创 2024-03-09 09:46:56 · 89 阅读 · 0 评论 -
JVM内存模型-静态链接,动态链接
将符号引用 替换为直接引用1.符号引用:字节码文件中,每一个代码都会被识别为一个符号可以使用以下命令查看2.直接引用:内存地址指针。原创 2024-03-09 09:41:49 · 202 阅读 · 0 评论 -
JVM内存模型-方法区(元空间)
2.使用直接内存,即物理机内存,不使用JVM虚拟机内存。3.用来存放程序启动时的 常量,类元信息包含以下内容。原创 2024-03-09 09:32:36 · 352 阅读 · 0 评论 -
JVM内存模型-栈,栈帧,操作数栈,
线程中的每一个方法都会被分配一个独有的栈帧空间,这样的原因是,每一个方法的局部变量作用域都是该方法。线程私有,程序启动时,虚拟机为每一个线程分配一块栈内存空间,来存储局部变量。栈帧又包含:局部变量表,操作数栈,动态链接,方法出口。,用来临时存放基本类型的数值,和引用类型的对象地址。操作数栈----->线程里方法的局部变量,数值等。栈帧------>线程里的方法。原创 2024-03-09 09:10:55 · 273 阅读 · 0 评论 -
类的加载,双亲委派机制
int =0,boolen =false ,引用类型=null。每次加载都会向父类中进行加载,如果没有父类了,就执行。通过IO流将class文件加载到内存区域。2.验证:保证每个类都是可以被引用的。类的加载器,是有父子关系,但不是继承。将 静态方法 替换为所存内存的指针。2.保证类的唯一性,避免重复加载。①校验文件格式 .class。②校验是否符合Java语言规范。1.沙箱安全,防止类被篡改。classpath 路径。③校验字节码是否合法。①将静态变量分配内存。3.应用程序类加载器。原创 2024-03-08 11:49:11 · 351 阅读 · 0 评论