JVM
文章平均质量分 65
A_Yisou
这个作者很懒,什么都没留下…
展开
-
垃圾回收算法和垃圾回收器
知道了什么是垃圾对象,垃圾对象满足怎样的条件会进入老年代。现在说说垃圾对象是在几个区之间流转的具体算法,这就是垃圾回收算法和实现他的垃圾收集器。对于他采用的是分代收集机制,也就是说,年轻代和老年代用的垃圾收集算法可以不一样。大致上来说,年轻代的活对象少,适合用复制算法,老年代对象大,而且需要大量的连续空间,所以用的是标记整理算法。先来说最基础的标记清除算法,他是最基础得垃圾回收算法。他分为标记和清除两个阶段,所谓的标记就是标记需要清除得对象,然后一次性清除,很显然,他不适合年轻代,因为要标记的次数太多,而原创 2021-03-16 14:15:32 · 82 阅读 · 0 评论 -
JVM垃圾收集原则和调优
关于JVM的垃圾收集,首先应该明白对象在堆中的几个原则,之前说的那些是最基本的情况,现在来说的是特殊情况,有时产生莫名其妙的fullgc可能就是源于他们,弄清楚他们才能避免意料之外的fullgc。第一个原则是最基础的,对象优先会在eden区分配,当然会有特殊情况,比如大对象,比如逃逸分析,后面再展开说,因为这个原则,我们需要让年轻代尽可能得大,而老年代够用就行。第二个原则是有的对象会在一次gc后就进入老年代,原因就在于Eden区往往比from区和to区大很多,就会出现Eden区发生minorgc后对象比fr原创 2021-03-16 14:14:35 · 173 阅读 · 0 评论 -
白话JVM(二)内存区域
关于JVM的内存区域,按线程私有/共享分为:线程私有的栈,程序计数器,本地方法栈。线程共享的堆和方法区。其中方法区在1.8之后叫做元空间。先从简单的说起吧,栈时每个线程都有的,比如,main方法就会起一个主线程栈,或者,用Java提供的API,也会创建一个线程栈。线程栈内保存基本数据类型的变量和自定对象的引用而非实例,当然也有可能是逃逸分析后的实例。线程栈中还有更复杂的结构,他就是栈帧,每一个方法对应一个栈帧。总得来说线程栈是一个FIFO先入先出的结构,每当有线程调用一个方法时,就会压入一个栈帧,执行完的原创 2021-03-16 14:12:52 · 111 阅读 · 1 评论 -
白话JVM(一)整体介绍
提到JVM,先从大致上分为三个部分,即类加载子系统,内存区域,字节码执行引擎。先来说类加载子系统。类加载子系统的作用就是把java文件翻译成字节码文件,再加载到内存区域中去,且如果不使用则不加载,使用时才加载,所谓的使用是指main和new这两个关键字。其过程分为5个步骤,即加载,检查,准备,解析,初始化。其中,加载是指从硬盘中找到.java文件,将其翻译成二进制字节码文件。检查是指检查.class文件是否被修改,是否符合jvm指令的词法,语法。我打开过.class文件,发现里面都是4个组成的字符,他是能原创 2021-03-16 14:11:46 · 89 阅读 · 0 评论 -
JVM双亲委派和垃圾收集
文章目录类加载机制加载类加载器双亲委派机制打破双亲委派总结1JVM整体结构程序计数器字节码执行引擎栈栈帧栈大小方法区本地方法栈堆JVM参数设置调优总结2垃圾收集机制逃逸分析JVM垃圾收集算法如何判断对象可被回收引用类型如何判断类可被回收finalize方法总结(待)垃圾回收算法/收集器垃圾回收算法标记清除算法复制算法标记整理算法分代收集算法垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器CMS收集器G1收集器实战调优(缺)类加载机制JVM是有3部分组成的:把类运行起原创 2020-12-07 23:38:42 · 165 阅读 · 0 评论