c语言 java 垃圾回收,JVM---内存管理和垃圾回收

Java的垃圾回收机制由Garbage Collection(GC)实现,它是一个低优先级的守护进程,当内存达到一定限制时自动运行。GC主要回收栈帧、方法区中静态属性和常量引用的对象,以及本地方法栈中JNI引用的对象。对象若与GC Roots无引用链相连则被视为垃圾。垃圾回收设计为不定期执行,以避免频繁GC导致的性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  何为GC

Java与C语言相比的一个优势是,可以通过自己的JVM自动分配和回收内存空间。

垃圾回收机制是由垃圾收集器Garbage Collection来实现的,GC是后台一个低优先级的守护进程。在内存中低到一定限度时才会自动运行,因此垃圾回收的时间是不确定的。

为何要这样设计:因为GC也要消耗CPU等资源,如果GC执行过于频繁会对Java的程序的执行产生较大的影响,因此实行不定期的GC。

与GC有关的是:JVM运行时数据区中的堆(对象实例会存储在这里)和 gabagecollector方法。

垃圾回收GC只能回收通过new关键字申请的内存(在堆上),但是堆上的内存并不完全是通过new申请分配的。还有一些本地方法,这些内存如果不手动释放,就会导致内存泄露,所以需要在finalize中用本地方法(nativemethod)如free操作等,再使用gc方法。

2.  何为垃圾

Java中那些不可达的对象就会变成垃圾。对象之间的引用可以抽象成树形结构,通过树根(GC Roots)作为起点,从这些树根往下搜索,搜索走过的链称为引用链。

当一个对象到GC Roots没有任何引用链相连时,则证明这个对象为可回收的对象。

可以作为GC Roots的主要有以下几种:

(1)栈帧中的本地变量表所引用的对象。

(2)方法区中类静态属性和常量引用的对象。

(3)本地方法栈中JNI(Native方法)引用的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值