本文目录一览

1,java的gc能立即回收垃圾吗

不一定。现在jvm采用分代回收机制,简单来说就是分为新生代和老生代,老生代内存空间比新生代大;大部分新对象都会优先分配到新生代,当新生代空间满了会发起一次Minor GC。而新分配的大对象或者在新生代空间里存活很久的对象会被放到老生代里,老生代空间满了会发起Major GC,但由于老生代里的对象生命周期比较长加上Major GC速度比Minor GC慢很多,所以发生在老生代的Major GC相对会比Minor GC少很多。因此垃圾能不能被立即回收,要看垃圾的大小,它所处在的空间和当前所处空间是否已满才能基本确定。若想了解得更详细,可以看看《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书。
垃圾回收的缩写就是gc。无论java还是c#的gc都是相应的虚拟机用来释放无用内存的机制,不同之处在于他们用的虚拟机不同。c++的析构函数是程序员手动写的回收内存和善后处理的函数。其功能相当与java的gc(回收内存)和finallize(善后处理)方法加起来。
用finalize方法跟gc可以去回收,但是具有不确定性.如果你要回收的对象里面还有线程在运行,调用system.gc没用,也不会调用你的finalize方法.

java的gc能立即回收垃圾吗

2,如何设置java gc回收算法

在java和c#语言中,使用的是托管代码,不像c++语言那样由程序员进行内存的手动分配和回收,java语言则由JVM即Java虚拟机 全权负责堆内存的管理,这样子大大减少了程序员的负担,同时一定程度上提高了开发效率和系统稳定性,而常用的GC垃圾回收算法有哪些呢?Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。
gc不可怕,可怕的是经常full gc,让整个jvm停止工作进行内存回收常见的几种触发点如下1、持久带满了,就是permanet generation满了会导致full gc,如果gc不成功,那就报out of memory了2、旧生代满了,导致full gc3、新生代向s0和s1转移数据,s0和s1向旧生代转移数据,结果两边的内存设置都比较小,持续出现,会导致full gc4、系统直接system.gc常见的调整方法就是在server和client模式下调整我们的gc策略来满足特定场合的需要。一般情况下不需要做这方面的特别调优,只需要设置好持久带和新生代(s0,s1,eden)、旧生代的内存大小即可。java会自动回收当前的资源,如果有需要就自己调用full gc。

如何设置java gc回收算法

3,gc是什么意思啊

GC abbr. 千兆周(gigacycle);车底距地高(Ground Clearance);制导计算机(Guidance Computer)短语词组:1.GC法 GC method;2.portable GC 便携式车载气相色谱仪;色谱仪;3.Sensory GC 感官气相色谱分析法;质谱仪;嗅觉气相层析仪;4.glucocorticoid GC 糖皮质激素;5.Makai GC 马凯球场;6.GC Busan 车轮战;7.GC Life 广慈有限公司;血管阻塞要人命。扩展资料:双语例句:1.However, each application is different and so you should evaluate each GC policy to find the best fit for your application.但是,应用程序是各不相同时,因此您应该评估各 GC 策略,以便找到最适合您应用程序的策略。2.We must first understand that the GC not only manages objects but also maintains a separate reference object to the actual object.我们必须首先理解这个 GC 不仅管理对象,而且还会维护对实际对象的一个单独的引用对象。3.This allows you to see only the methods executing when GC went wrong, for example, or to exclude data analyzed during application startup.这允许您,例如,只看到在 GC 出现问题时执行的方法;或者排除在应用程序启动期间分析的数据。参考资料:有道词典-gc
GC有多层含义,使用环境比较多,基本是拼音的首字母所写,如:观察、公厕。一是计算机术语,指Gabage Collection;二是网络用语,踩空间,灌水的时候广东白话里“支持”的意思;三是网络域中的GC,就是“全局目录”Global Catalog;四是科研用语,即Gas Chromatography(气相色谱法);拓展资料GC的全称是garbage collection,中文名称垃圾回收,是.net中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收给没有有效引用的对象的内存。用内存不能满足内存请求时,GC会自动进行。 在进行垃圾回收时,垃圾回收器回首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起。这就是GC的四个步骤。
GC有多层含义,使用环境比较多,基本是拼音的首字母所写,如:观察、公厕。一是计算机术语,指Gabage Collection;二是网络用语,踩空间,灌水的时候广东白话里“支持”的意思;三是网络域中的GC,就是“全局目录”Global Catalog;四是科研用语,即Gas Chromatography(气相色谱法);拓展资料垃圾回收 (garbage collection, GC) 一个跟踪过程,它传递性地跟踪指向当前使用的对象的所有指针,以便找到可以引用的所有对象,然后重新使用在此跟踪过程中未找到的任何堆内存。公共语言运行库垃圾回收器还压缩使用中的内存,以缩小堆所需要的工作空间 。
GC有多层含义,使用环境比较多,基本是拼音的首字母所写,有:观察、滚操、高潮、公厕。一是计算机术语,指Gabage Collection;二是网络用语,踩空间,灌水的时候广东白话里“支持”的意思;三是网络域中的GC,就是“全局目录”Global Catalog;四是科研用语,即Gas Chromatography(气相色谱法);五是ML特定用语,即“高----潮”。
有人知道GC是什么意思吗在逛论坛的时候经常会看见有人问GC是什么意思啊,到处GC是什么意思呢?

gc是什么意思啊

4,如何理解垃圾回收gc

作者:朱克锋1:垃圾回收机制由JVM完全负责,编写者在抛弃对象时不必关系空间回收问题2:JVM的垃圾回收机制对堆空间做实时监测,当发现某对象的引用计数为0时,就将该对象列入待回收系类中并不是马上予以销毁3:某个对象被认定为没有必要存在了,那么它所占用的内存就可以被释放,被回收的内存可以用于后续的再分配,并不是对象被抛弃后就立即被回收,垃圾回收器通常只在有对象要回收且系统需要回收时才运行,因此用户无法知道垃圾回收发生的精确时间4:system,gc()也仅仅是一个回收请求,JVM接受到这个消息后并不是立即做垃圾回收,而只是对几个垃圾回收算法做加权使垃圾回收操作容易发生或提前发生5:当对象即将被销毁时,有时需要做一些善后工作,可以把这些操作写在finalize()方法里(终止器)注:到程序接受时,并非所有收尾模块都会得到调用当指向某个对象的最后一个引用被删除,那么该对象就可以被删除:在对象的无用时可以回收Java的垃圾回收并不能保证内存的耗尽,其只是一个低优先级的后台线程且跟踪可达或者不可达的对象A:当JVM的拦截器调用一个合适对象的finalize()方法时,它会忽略任何由finalize()方法抛出的异常,其它情况下finalize()方法中的异常处理同普遍方法的出来是一样的B:Object对象有一个finalize()方法,由于所有的参数都是从Object类继承而来,因此所有对象有一个finalize()方法C:类可以覆盖finalize()方法,而且和普通的方法覆盖一样,不能降低finalize()方法的访问权限,调用finalize()方法本身不会破坏对象
1.java中finalize()的作用一主要是清理那些对象(并非使用new)获得了一块“特殊”的内存区域。程序员可以用finalize()来操作。 程序员都了解初始化的重要性,但常常会忘记同样也重要的清理工作。毕竟,谁需要清理一个int呢?但在使用程序库时,把一个对象用完后就“弃之不顾”的做法并非总是安全的。当然,java有垃圾回收器负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存区域,为了应对这种情况,java允许在类中定义一个名为finalize()的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储孔家,将首先调用其finalize()的方法。并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。注意这里的finalize()并不是c++里的析构.在c++中,对象一定会被销毁,而在java里的对象却并非总是被垃圾回收(1.对象可能不被垃圾回收;2.垃圾回收并并不等于“析构”)。 2.垃圾回收只与内存有关。也就是说,使用垃圾回收器的唯一原因是为了回收程序不再使用的内存。所以对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),它们也必须同内存及其回收有关。但这是否意味着要是对象中含有其他对象,finalize()就应该明确释放那些对象呢?不,无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存。这就将对finalize()的需求限制到一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储空间。不过,java中一切皆为对象,那这种特殊情况是怎么回事呢?由于在分配内存时可能采用了类似c语言中的做法,而非java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在java中调用非java代码的方式。在非java代码中,也许会调用c的malloc()函数系列来分配存储空间,而且除非了free()函数 3.垃圾回收如何工作“引用记数(reference counting)”是一种简单但速度很慢的垃圾回收技术。每个对象都含有一个引用记数器,当有引用连接至对象时,引用计数加1。当引用离开作用域或被置为null时,引用计数减1。虽然管理引用记数的开销不大,但需要在整个程序生命周期中持续地开销。垃圾回收器会在含有全部对象的列表上遍历,当发现某个对象的引用计数为0时,就释放其占用的空间。这种方法有个缺陷,如果对象之间存在循环引用,可能会出现“对象应该被回收,但引用计数却不为零”的情况。对垃圾回收器而言,定位这样存在交互引用的对象组所需的工作量极大。引用记数常用来说明垃圾收集的工作方式,似乎从未被应用于任何一种java虚拟机实现中。

文章TAG:垃圾  垃圾回收  回收  java  gc垃圾回收  
下一篇