首页编程java编程java中gc是什么意思啊(java中GC是什么为什么要有GC)

java中gc是什么意思啊(java中GC是什么为什么要有GC)

编程之家2023-10-11103次浏览

大家好,今天给各位分享java中gc是什么意思啊的一些知识,其中也会对java中GC是什么为什么要有GC进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

java中gc是什么意思啊(java中GC是什么为什么要有GC)

Java中full gc什么意思

gc是垃圾回收的意思(gabage

collection),内存处理器是编程人员容易出现问题的地方,忘记或者错误的内存回收导致程序或者系统的不稳定甚至崩溃,java的gc功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的俄显示操作方法。

希望能帮到你,谢谢!

java中gc是什么意思啊(java中GC是什么为什么要有GC)

gc是什么意思啊

常用的GC算法:

1)标记非活动对象

--何为非活动对象,通俗的讲,就是无引用的对象。

java中gc是什么意思啊(java中GC是什么为什么要有GC)

追踪root对象算法:深度追踪root对象,将heap中所有被引用到的root做标志,所有未被标志的对象视为非活动对象,所占用的空间视为非活动内存。

2)清理非活动对象

Copy算法:

方法:将内存分为两个区域(from space和to space)。所有的对象分配内存都分配到from space。在清理非活动对象阶段,把所有标志为活动的对象,copy到to space,之后清楚from space空间。然后互换from sapce和to space的身份。既原先的from space变成to sapce,原先的to space变成from space。每次清理,重复上述过程。

优点:copy算法不理会非活动对象,copy数量仅仅取决为活动对象的数量。并且在copy的同时,整理了heap空间,即,to space的空间使用始终是连续的,内存使用效率得到提高。

缺点:划分from space和to space,内存的使用率是1/2。

Compaction算法:

方法:在清理非活动对象阶段,删除非活动对象占用内存,并且把活动对象向heap的底部移动,直到所有的活动对象被移到heap的一侧。

优点:无须划分from sapce和to space,提高内存的使用率。并且compaction后的内存空间也是连续分配的。

缺点:该算法相对比较复杂。

sun jdk gc介绍:

在减少gc之前,先来看看来自IBM的一组统计数据:

98%的java对象,在创建之后不久就变成了非活动对象;只有2%的对象,会在长时间一直处于活动状态。

如果能对这两种对象区分对象,那么会提交GC的效率。在sun jdk gc中(具体的说,是在jdk1.4之后的版本),提出了不同生命周期的GC策略。

young generation:

生命周期很短的对象,归为young generation。由于生命周期很短,这部分对象在gc的时候,很大部分的对象已经成为非活动对象。因此针对young generation的对象,采用copy算法,只需要将少量的存活下来的对象copy到to space。存活的对象数量越少,那么copy算法的效率越高。

young generation的gc称为minor gc。经过数次minor gc,依旧存活的对象,将被移出young generation,移到tenured generation(下面将会介绍)

young generation分为:

eden:每当对象创建的时候,总是被分配在这个区域

survivor1:copy算法中的from space

survivor2:copy算法中的to sapce(备注:其中survivor1和survivor2的身份在每次minor gc后被互换)

minor gc的时候,会把eden+survivor1(2)的对象copy到survivor2(1)去。

tenured generation:

生命周期较常的对象,归入到tenured generation。一般是经过多次minor gc,还依旧存活的对象,将移入到tenured generation。(当然,在minor gc中如果存活的对象的超过survivor的容量,放不下的对象会直接移入到tenured generation)

tenured generation的gc称为major gc,就是通常说的full gc。

采用compactiion算法。由于tenured generaion区域比较大,而且通常对象生命周期都比较常,compaction需要一定时间。所以这部分的gc时间比较长。

minor gc可能引发full gc。当eden+from space的空间大于tenured generation区的剩余空间时,会引发full gc。这是悲观算法,要确保eden+from space的对象如果都存活,必须有足够的tenured generation空间存放这些对象。

Permanet Generation:

该区域比较稳定,主要用于存放classloader信息,比如类信息和method信息。

对于spring hibernate这些需要动态类型支持的框架,这个区域需要足够的空间。

这部分内容相对比较理论,可以结合jstat,jmap等命令(当然也可以使用jconsole,jprofile,gciewer等工具),观察jdk gc的情

Java中 gc的作用是什么

System.gc()用来强制立即回收垃圾,即释放内存。

java对内存的释放采取的垃圾自动回收机制,在编程的时候不用考虑变量不用时释放内存,java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内存空间,当然也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存

java中GC是什么为什么要有GC

GC是垃圾回收的意思(gabage collection),内存处理器是编程人员容易出现问题的地方,忘记或者错误的内存回收导致程序或者系统的不稳定甚至崩溃,java的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的俄显示操作方法。

希望能帮到你,谢谢!

文章分享结束,java中gc是什么意思啊和java中GC是什么为什么要有GC的答案你都知道了吗?欢迎再次光临本站哦!

java 什么是servlet “servlet”指的是什么javaee都学什么区别 javaEE和java有什么区别