JVM知识点总结

1. 什么是java垃圾回收机制

垃圾回收机制不定时,向堆内存清理不可达对象。
finalize() 垃圾回收之前执行的方法

    public static void main(String[] args) {
        Test test=new Test(); //如果没使用test是算不可达(没有被引用)
        test=null;  //设置null大概率会回收
        System.gc();//手动回收垃圾
    }
    @Override
    protected void finalize() throws Throwable {
        System.out.println("垃圾回收机制之前...");
    }

2. 内存溢出、内存泄漏区别

内存溢出:需要4g内存,只支持3g内存 算溢出
内存泄漏:定义很多静态变量,垃圾不会去回收,这个对象又没被引用,报错泄漏
(浪费造成的内存泄漏)

3. gc垃圾回收机制---->算法

a. 引用计数法 ---->eden区
User user=new User();

给对象添加一个引用计算器,有一个初试次数(15次),不被引用-1,被引用+1,如果当对象被标记次数为0就会被回收。如果次数大于15次后就会进入s0或者s1区。

b. 标记清除法 ---->老年代

为每个对象作一个标记,0可达,1不可达。通过改变其标记状态码来判断是否被清除,因为是个体清除,可能会出现垃圾碎片。

c. 标记压缩法 ---->老年代

标记算法用在老年代是因为新生代创建比较频繁。
在标记清除基础之上做了优化,把存活的对象压缩到内存一端,而后进行垃圾清理。

d. 复制算法 ---->新生代 s0 s1(大小相同)

主要处理s0 s1新生代区域的对象,如果s0对象里面有部分对象不可达,将可达对象移动(复制)到s1区,清楚掉s0区域的所有对象

e. 分代算法 ---->新生代 老年代

根据内存中对象的存活周期不同,将内存划分为几块,然后存放这些对象,然后根据不同算法进行回收。

4. 垃圾收集器

串行收集器 —> 单线程收集垃圾 效率低
并行收集器 —> 多线程 效率高

jvm参数调优

-XX:+PrintGCDetails -Xmx32M -Xms32M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseSerialGC
-XX:PermSize=32M

ps: 单纯记录自己所学记录------------仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值