导航:首页 > 编程语言 > java内存gc

java内存gc

发布时间:2022-04-26 05:38:42

java垃圾回收那点事究竟有多少GC

GC不可怕,可怕的是经常FULL GC,让整个JVM停止工作进行内存回收
常见的几种触发点如下
1、持久带满了,就是Permanet Generation满了会导致FULL GC,如果GC不成功,那就报out of memory了
2、旧生代满了,导致FULL GC
3、新生代向S0和S1转移数据,S0和S1向旧生代转移数据,结果两边的内存设置都比较小,持续出现,会导致FULL GC
4、系统直接system.gc
常见的调整方法就是在server和client模式下调整我们的GC策略来满足特定场合的需要。一般情况下不需要做这方面的特别调优,只需要设置好持久带和新生代(S0,S1,Eden)、旧生代的内存大小即可。java会自动回收当前的资源,如果有需要就自己调用full gc。
我们把GC分成4种类型
1. SerialGC

参数-XX:+UseSerialGC

就是Young区和old区都使用serial 垃圾回收算法

2. ParallelGC

参数-XX:+UseParallelGC

Young区:使用Parallel scavenge 回收算法

Old 区:可以使用单线程的或者Parallel 垃圾回收算法,由 -XX:+UseParallelOldGC 来控制

3. CMS

参数-XX:+UseConcMarkSweepGC

Young区:可以使用普通的或者parallel 垃圾回收算法,由参数 -XX:+UseParNewGC来控制

Old 区:只能使用Concurrent Mark Sweep

4. G1

参数:-XX:+UseG1GC

没有young/old区

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

GC频繁发生的原因是堆空间不足。
修改permanent的大小是解决不了问题的,一般来说,permanent(持久带)的变化并不大,如果持久带不够用,一般不会GC,而是直接抛出持久带的OOM( out of memory)
所以,解决该公司的问题,最重要的是提高最小堆空间-Xms和最大堆空间-Xmx 的大小,提高年轻带-Xmn有助于在一定的程度解决GC的问题,但是注意,这些只是很简单的讨论。个人觉得,频繁GC发生的问题,最好是看看内存的DUMP文件,进行分析,在对JVM参数进行相对的配置。
JVM相关的问题还是比较复杂的,并不是几句对参数的描述就能解决问题,你还是要多看JVM相关资料。
评论(0)

❸ java gc是什么,为什么要有gc

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

❹ 了解java GC 工作中哪些场景需要用到,需要考虑到

GC的时候一般是内存不够了或者发生了内存泄漏。
请注意:内存不够用和内存泄漏是两个概念,不懂的话,请问度娘。
比如,你是一名Java后端工程师,从事大数据开发相关的岗位,那么你在写程序的时候就需要结合java GC的原理,对你的程序进行优化。
大白话讲,内存就那么多,优秀的工程师可以让它的利用率最高。
了解GC原理有助于你达到这一目的。

❺ java中GC指的是什么

gc是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。

❻ Java 等语言的 GC 为什么不及时释放内存

c语言没有垃圾回收机制,所有new出来的内存都要手动释放,优点是效率高,
一旦free立即执行,缺点是手动释放xd.
java有独立的gc线程,
而且由于gc线程执行优先级很低,垃圾能不能及时回收取
决于gc策略和工作线程的执行密度.

❼ 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是什么为什么要有GC

gc是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。

❾ 如何优化java gc

内存(条)是便宜,很不幸,垃圾回收机制导致的暂停会严重影响系统性能,好像JVM内存最多支持2G,作者花费大量时间精力使用32G来提高系统性能,这篇是其心得。
GC微调是非常和应用有关,该篇的目标要求是:使用10G更大Heaps和严格的响应时间(毫秒级别),(吞吐量和延迟性是一对矛盾,这次GC微调主要是追求低延迟)。作者项目特点是:
1.Heap用于在内存中储存数据结构
2.Heap大小超过10G
3.请求时间要求更快
4.事务是短的(几百毫秒) 一个事务可以包括几个请求
5.内存中数据修改频率和面积低,不会一秒内修改整个10G内存,每秒更新10M即可。
此处省略垃圾回收机制原理介绍.....
总体来说,banq注:JVM分新生代和旧生代,新创建在新生代,通过新生代垃圾回收,如果不能被回收,将逐步转入旧生代,旧生代内存可以实现缓存In-memeory数据,显然新旧两代的垃圾回收算法最好不一样,新生代需要频繁,而旧生代不需要频繁,如果我们内存缓存控制得好,旧生代就不会启动垃圾回收机制,这样就不会导致系统暂停。

❿ java中 已经触发过GC清理,为什么还会造成内存不足与GC的死循环呢

简单地说,GC只会清理已经不会使用的对象内存,如果你的对象还要使用,即使GC也还会保留在内存的。如果在GC过后内存还是不足,GC就会继续进行,造成死循环。

阅读全文

与java内存gc相关的资料

热点内容
python列表求交集 浏览:872
解压包如何转音频 浏览:447
机明自动编程软件源码 浏览:325
php端口号设置 浏览:541
phperegreplace 浏览:320
androidgridview翻页 浏览:537
ssh协议编程 浏览:634
如何开我的世界电脑服务器地址 浏览:861
玄关pdf 浏览:609
程序员学习论坛 浏览:940
程序员的毒鸡汤怎么做 浏览:548
安卓怎么降级软件到手机 浏览:281
云与服务器入门书籍推荐产品 浏览:636
delphi编程助手 浏览:762
电脑遇到服务器问题怎么办 浏览:515
加工中心编程结束方法 浏览:296
了解什么是web服务器 浏览:140
面向对象的编程的基本特征 浏览:718
php定时执行任务linux 浏览:787
php数组中删除元素 浏览:725