![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
夜微凉4
这个作者很懒,什么都没留下…
展开
-
系统短时间不可用问题排查
可以看到约为20M 同时发现系统垃圾回收器使用的是Mark Sweep Compact GC 也就是默认垃圾回收器:串行GC(Serial GC)查询相关资料发现,Metaspace满之后会进行扩容,扩容会进行触发FGC。查看启动参数发现并没有设置Metasapce的大小。借助Arthas查看当前Metaspace大小。发现当前大小为231M,远远大于默认值20M。查询默认Metaspace大小(单位B)由此可见,系统短时不可用原因已经定位到。查看监控,发现 GC、FGC都比较高。原创 2023-12-03 17:23:44 · 84 阅读 · 0 评论 -
常见的垃圾回收器
GCRoot的对象包括以下几种: a. java虚拟机栈(栈帧中的本地变量表)中的引用的对象。 b.方法区中的类静态属性引用的对象。 c.方法区中的常量引用的对象。 d.本地方法栈中JNI本地方法的引用对象。 ...原创 2021-04-07 13:29:16 · 79 阅读 · 0 评论 -
JVM堆中的内存分配策略
首先堆中分为新生区(Young Generation Space)和老年区(Tenure generation space),新生区又分为伊甸区(Eden Space)和幸存者区(Survivor Space),幸存者区又分为幸存者from区和幸存者to区 当一个对象被new出来的时候首先被分配到伊甸区,如果伊甸区内存满了就会触发一次Minor GC,进行一次垃圾回收,然后把还存活的对象移动到幸存者to区,并将这个对象的年龄设置为1,再把幸存者from区中存活的对象移动到幸存者to区,将这些对象的年龄加1原创 2020-10-19 21:38:33 · 109 阅读 · 0 评论 -
java中JVM的垃圾回收算法
GC垃圾回收算法 1.复制算法 基本思想: 将内存分为两块,每当发生垃圾回收的时候就把一块内存中还存活的对象复制到另一块中,然后将原来内存中的对象清空,如此反复。 复制算法的优点: 不会产生内存碎片 复制算法的缺点: 浪费了一半的内存空间(有一半的空间是不能存任何对象的) 只适合对象存活率低的情况(假如说对象存活率很高的话,进行复制的时候会消耗大量的时间) 2.标记清除算法 基本思想: 垃圾回收时,遍历整个堆,对堆中存活的对象进行标记,然后再重新遍历整个堆,对没有被标记的对象进行垃圾回收 缺点:原创 2020-10-19 20:59:51 · 59 阅读 · 0 评论 -
Minor GC和Full GC有什么不一样?
**新生代GC(Minor GC):**指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝 生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。 老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC,经常会伴 随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行 Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。 ...原创 2020-10-19 17:21:13 · 220 阅读 · 0 评论 -
如何判断一个对象是否可以垃圾回收器被回收?
两大算法 1.引用计数法 每个对象都维护一个引用计数器,每个此对象被引用的时候就将计数器加一,当对象被取消引用的时候就将计数器减一,如果计数器为0,那么认为这个对象是垃圾,可以被回收。 引用计数法的缺点: 每个对象都有一个引用计数器,维护这个引用计数器有一定的资源消耗 无法解决循环引用的问题(假如说A对象中引用了B,B对象中引用了A,其他的所有对象都没有引用A和B对象,这个时候A和B对象其实就是垃圾,可以被回收,但是由于采用引用计数法,A和B对象的引用计数器都为1,所以垃圾回收器认为A和B对象不是垃圾,无原创 2020-10-19 17:08:08 · 495 阅读 · 0 评论 -
Java中JVM运行时数据区
原创 2020-10-19 16:46:45 · 63 阅读 · 0 评论 -
JVM中类的加载顺序
(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 ) (3) 父类非静态代码块( 包括非静态初始化块,非静态属性 ) (4) 父类构造函数 (5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 ) (6) 子类构造函数 其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的) ...原创 2020-10-19 11:10:32 · 290 阅读 · 0 评论