JVM相关知识

 jvm 虚拟机内存分配模型?

1.堆内存(heap):java对象存储空间,创建对象开辟堆内存空间,存储对象的成员,空间只能被垃圾回收器回收,不会自动回收,内存占用超过98%,回收只能2%,内存溢出。

2.栈内存(stack):java中局部变量或者形式参数的存储空间,方法调用开辟空间,方法执行结束,空间自动释放,如果递归方法或者死循环会导致栈内存溢出

3.方法区:方法区又被称为永久区,线程共享,是用来存储已被JVM加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。

4.本地方法区

5.程序计数器

堆和栈的区别?

功能方面:堆是用来存放对象的,栈是用来执行程序的。

共享性:堆是线程共享的,栈是线程私有的。

空间大小:堆大小远远大于栈

说一下 JVM 有哪些垃圾回收算法?

标记-整理算法:标记无用算法,让所有存活的对象都向一端移动,然后直接清楚掉端边界以外的内存。

复制算法:按照容量划分为二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后在把已使用的内存空间一次清理掉。

缺点:内存使用率不高,只有原来的一半

分代算法:根据对象存活周期的不同,将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法

 jvm 虚拟机的垃圾回收机制?

1.jvm的垃圾回收机制后很多方法和垃圾回收器,我只了解分代管理法和清楚标记法

2.在jvm内存中有新生代,年老代,永生代,新生代中又包含Eden和survival,幸存者有两块内存区域,但是使用时,仅一个区域可用,另一块幸存者内存区必须为空。

3.当创建对象时,会首先在Eden中开辟新的空间,如果Eden的内存区域不够用,无法开辟新的内存空间,则会对Eden进行扫描,然后标记,垃圾回收器此时会找出那些内存在使用中,还有那些不是,垃圾回收器要检查所有的对象,对需要清楚的对象进行标记,清理垃圾回想,然后把保留的对象拷贝到survival幸存者区域

4.如果Eden和survival新生代内存区域全部存满,这时候对整个新生代内存区域进行扫描,将需要清楚的对象进行标记,进行清除,将其他对象拷贝到年老代,这种GC称为YoungGC

5.如果年老代内存区域也存满,需要对整个内存区域进行扫描,对对象进行标记,清除新生代和年老代内存区域,将垃圾对象清除,这种GC称为FullGC

6.垃圾回收器分为串行回收器,并行回收器,并发回收器,串行垃圾回收器单线程,效率低,并行和并发回收器为多线程,但是并发回收器会造成程序阻塞,所以使用并行回收器进行垃圾回收,过程中会产生垃圾回收碎片,会自动转换为串行垃圾回收器,清理完碎片,自动转换为并行垃圾回收器,不会对程序造成影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值