java中的垃圾回收机制是怎样的?
4个回答
展开全部
比如你new了一个A类 用了一次之后不需要再用了。可以调用gc方法(垃圾回收的方法,这个懂了你就懂垃圾回收是干嘛的了)进行回收。
jvm自己知道把虚拟机中没用别调用的但是存在的实例回收。
网上的资料( GC(Games Convention) 或 GC(Garbage Collection)
JAVA/.NET中的垃圾收集器。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。而C#又借鉴了JAVA。
在老式的槐册C/C++程序中,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。由于内存是有限的,所以当程序不再需要使用某个变量的时候,就需要销毁该对象并释放其所占用的内存资源,好重新利用这段空间。在C/C++中,释放无用变量内存空间的事情需要由程序员自己来处理。就是说当程序员认为变量没用了,就手动地释放其占用的内存简迹。但是这样显然非常繁琐,如果有所遗漏,就可能造成资源浪费甚至内存泄露。当软件系统比较复杂,变量多的时候程序员往往就忘记释放内存或者在不该释放的时候释放内存了。
有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)或.NET CLI发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间(这里的说法略显粗略,事实上何时清理内存是个铅咐宏复杂的策略)。如果需要,可以在程序中显式地使用System.gc() / System.GC.Collect()来强制进行一次立即的内存清理。)
jvm自己知道把虚拟机中没用别调用的但是存在的实例回收。
网上的资料( GC(Games Convention) 或 GC(Garbage Collection)
JAVA/.NET中的垃圾收集器。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。而C#又借鉴了JAVA。
在老式的槐册C/C++程序中,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。由于内存是有限的,所以当程序不再需要使用某个变量的时候,就需要销毁该对象并释放其所占用的内存资源,好重新利用这段空间。在C/C++中,释放无用变量内存空间的事情需要由程序员自己来处理。就是说当程序员认为变量没用了,就手动地释放其占用的内存简迹。但是这样显然非常繁琐,如果有所遗漏,就可能造成资源浪费甚至内存泄露。当软件系统比较复杂,变量多的时候程序员往往就忘记释放内存或者在不该释放的时候释放内存了。
有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)或.NET CLI发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间(这里的说法略显粗略,事实上何时清理内存是个铅咐宏复杂的策略)。如果需要,可以在程序中显式地使用System.gc() / System.GC.Collect()来强制进行一次立即的内存清理。)
参考资料: 百度百科
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java的堆是一个运行时数据区,类的实例(对象)从亮枯运中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通败悔过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。
一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存敬梁的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。
一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存敬梁的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过有向图实现的,当对象不可达的时候,就会被JVM回收。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询