首页编程java编程java gc什么时候调度 Java垃圾回收:GC在什么时候对什么做了什么

java gc什么时候调度 Java垃圾回收:GC在什么时候对什么做了什么

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

本篇文章给大家谈谈java gc什么时候调度,以及Java垃圾回收:GC在什么时候对什么做了什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

java gc什么时候调度 Java垃圾回收:GC在什么时候对什么做了什么

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

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

希望能帮到你,谢谢!

java方法区有没有gc

java方法区是存在GC的

java gc什么时候调度 Java垃圾回收:GC在什么时候对什么做了什么

回收方法区

方法区即为永久代,主要回收两部分内容:废弃常量和无用类。

满足以下3个条件的类称之为无用类

java gc什么时候调度 Java垃圾回收:GC在什么时候对什么做了什么

该类所所有的对象实例已经被回收,也就是java堆中不存在该类的任何实例

加载该类的ClassLoader已经被回收

该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

在大量使用反射、动态代理、CGLib等ByteCode框架、动态生成JSP以及OSGI这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载的功能,以保证永久带不会溢出。

Java系统中GC频繁启动是什么原因

GC频繁发生的原因是堆空间不足。

修改permanent的大小是解决不了问题的,一般来说,permanent(持久带)的变化并不大,如果持久带不够用,一般不会GC,而是直接抛出持久带的OOM( out of memory)

所以,解决该公司的问题,最重要的是提高最小堆空间-Xms和最大堆空间-Xmx的大小,提高年轻带-Xmn有助于在一定的程度解决GC的问题,但是注意,这些只是很简单的讨论。个人觉得,频繁GC发生的问题,最好是看看内存的DUMP文件,进行分析,在对JVM参数进行相对的配置。

JVM相关的问题还是比较复杂的,并不是几句对参数的描述就能解决问题,你还是要多看JVM相关资料。

评论(0)

Java垃圾回收:GC在什么时候对什么做了什么

1、首先,GC又分为minor GC和 Full GC(major GC)。Java堆内存分为新生代和老年代,新生代中又分为1个eden区和两个Survior区域。

2、一般情况下,新创建的对象都会被分配到eden区,这些对象经过一个minor gc后仍然存活将会被移动到Survior区域中,对象在Survior中没熬过一个Minor GC,年龄就会增加一岁,当他的年龄到达一定程度时,就会被移动到老年代中。

3、当eden区满时,还存活的对象将被复制到survior区,当一个survior区满时,此区域的存活对象将被复制到另外一个survior区,当另外一个也满了的时候,从前一个Survior区复制过来的并且此时还存活的对象,将可能被复制到老年代。因为年轻代中的对象基本都是朝生夕死(80%以上),所以年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想是将内存分为两块,每次只有其中一块,当这一块内存使用完,就将还活着的对象复制到另一块上面。复制算法不会产生内存碎片。

4、在GC开始的时候,对象只会存在于eden区,和名为“From”的Survior区,Survior区“to”是空的。紧接着GCeden区中所有存活的对象都会被复制到“To”,而在from区中,仍存活的对象会根据他们的年龄值来决定去向,年龄到达一定只的对象会被复制到老年代,没有到达的对象会被复制到to survior中,经过这次gc后,eden区和fromsurvior区已经被清空。这个时候,from和to会交换他们的角色,也就是新的to就是上次GC前的fromMinor GC:从年轻代回收内存。

5、当jvm无法为一个新的对象分配空间时会触发Minor GC,比如当Eden区满了。当内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden和Survior区不存在内存碎片写指针总是停留在所使用内存池的顶部。执行minor操作时不会影响到永久代,从永久带到年轻代的引用被当成GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉(永久代用来存放java的类信息)。如果eden区域中大部分对象被认为是垃圾,永远也不会复制到Survior区域或者老年代空间。如果正好相反,eden区域大部分新生对象不符合GC条件,Minor GC执行时暂停的线程时间将会长很多。Minor may call"stop the world"。

java gc什么时候调度和Java垃圾回收:GC在什么时候对什么做了什么的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java开发用什么框架?Java目前主流框架都有哪些java初学用什么软件?学java需要什么软件