您的位置:

java总结之full(java的总结)

本文目录一览:

  • 1、Java 中isFull是哪个包?
  • 2、java 怎样规避full gc
  • 3、java fullgc什么意思
  • 4、java培训结束后总结如何写?
  • 5、Java中full gc什么意思?

Java 中isFull是哪个包?

isFull是自定义方法,一般用来判断stack是否为满栈。。

可以放到任意包

java 怎样规避full gc

据我观察JAVA程序,一般在命令行模式下运行JAVA任务,JDK可以承受的内存上限大概是机器物理内存的1/4。

比如我的服务器是16G的内存,那么JAVA程序可以占用的最大内存是4G左右,超出就报溢出。

所以在一般程序运行中,JAVA内存逐渐从

100MB 200MB, 300...1G...2G...... 膨胀到4G,在这个过程中,我的循环都设置了System.gc(),偶尔有占用内存减少的时候,但是基本下降都很有限,然后过一会儿又继续上升。直到上升到4G的时候,如果此时系统没有明确的数据持续写进内存,只是大量进行新建变量,赋值,然后生命周期结束待回收的过程,系统会大量进行GC的操作,保证JAVA内存不超过4G,但我似乎感觉一旦在内存在4G上下游动的时候,JAVA程序的性能就开始走低。

所以我的理解是,GC直到不得不执行的时候才会被执行,而且效果并不好。。。。

PS,如果是8G内存的服务器,GC频繁执行是在JAVA占用内存到达2G的时候。

同不知道如何进行高效的内存回收。本来没有任何写入内存操作的程序,但是程序处理问题一大了,占有内存就很多。

java fullgc什么意思

GC是垃圾回收站。

FULL GC分析和问题定位

a. GC log收集和分析

(1)在JVM启动参数增加:"-verbose:gc -Xloggc:file_name -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

PrintGCTimeStamp只能获得相对时间,建议使用PrintGCDateStamps获得full gc 发生的绝对时间

(2)如果采用CMS GC,仔细分析jstat FGC输出和GC 日志会发现, CMS的每个并发GC周期则有两个stop-the-world阶段——initial mark与final re-mark,使得CMS的每个并发GC周期总共会更新full GC计数器两次,initial mark与final re-mark各一次

b. Dump JVM 内存快照

/opt/taobao/java/bin/jmap -dump:format=b,file=dump.bin pid

这里有一个问题是什么时候进行dump?

一种方法是前面提到的用jstat工具观察,当OLD区到达比较高的比例如60%,一般会很快触发一次FULL GC,可以进行一次DUMP,在FULL GC发生以后再DUMP一次,这样比较就可以发现到底是哪些对象导致不停的FULL GC

另外一种方法是通过配置JVM参数

-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC分别用于指定在full GC之前与之后生成heap dump

c. 利用MAT((Memory Analyzer Tool)工具分析dump文件

关于MAT具体使用方法网上有很多介绍,这里不做详细展开,这里需要注意的是:

(1) MAT缺省只分析reachable的对象,unreachable的对象(将被收集掉的对象)被忽略,而分析FULL GC频繁原因时unreachable object也应该同时被重点关注。如果要显示unreachable的对象细节必须用mat 1.1以上版本并且打开选项“keep unreachable object”

(2) 通常dump文件会好几个G,无法在windows上直接进行分析,我们可以先把dump文件在linux上进行分析,再把分析好的文件拷贝到windows上,在windows上用MAT打开分析文件。

java培训结束后总结如何写?

java语言是-种跨平台的高级语言,无论是网络世界和桌面应用程序,还是分布式应用环境和嵌入式应用都可以看到java的身影。显然java语言依然保持着旺盛的生命力,这也使得众多的从业人员开始学习java语言。不过大家在Java培训班学习之后,学校肯定会让写java学习总结的,这样很多程序猿头疼,因为学习程序之后,大家的作文水平明显会下降,今天我就把总结的技巧告诉大家。1、在那个机构学习的,学习的过程怎样:比如:某某在昆明北大青鸟学习JAVA软件开发也有一段时间了,现在java的学习就要结束了,我对java从初步的认识的认识到能够熟练掌握各个方面的问题。比如说一下面向对象:面向对象是个很严肃的问题,就向上下级关系一样,下级在有的方面就得遵守.上级的指令做事,这样就便于管理,更是提高了生产的效率。在这里学习一段时间使我受益匪浅,从刚毕业的迷茫之际,到现在敢于去各大公司面试,上岗,对自己信心满满。2、从自身出发:比如:自从学习了这么课程之后,最让我感觉深刻的是时间不够用,每天过得很充实。忙到没时间拍拖,忙到没时间休闲娱乐,忙到废寝忘食还在写着代码,就连吃饭睡觉同学们都在谈论着如何写代码才能实现某种功能。某位老师java编程的课程让我受益匪浅,某某老师幽默风趣,由浅入深,循序渐进教学方式让我们更快掌握代码,而且他还让我们参与软件开发项目,理论结合实践,让我们在工作中发现问题,在实践中成长。这种浸入式的java培训教学我觉得很好,实践出真知,只有在实践中才能真正学到东西,发现问题,才能更好提升自己。3、认识到的朋友:比如:在这段时间的学习生活中,我也认识了很多同学,我们来自不同的学校,我们因为共同的理想而走在一起,其间我们有过迷茫和彷徨,有过艰辛还有欢笑,但不管怎样,我们微笑着面对,因为我们是一个有理想的码农。虽然我们在我们前行的道路上,或许有些许坎坷,但其实人生的快乐正是在起起落落间,只要坚信我们前进的方向正确,我深信,终有一天总会触摸到天堂。4、最后感谢学校、老师、朋友感谢的话就不为大家举例了,相信大家都会有对待学校老师朋友都有着重大的感情,以上观点知识小编为大家总结的几点技巧,只是本人的观点,如果能够帮助到大家,本人也是很高兴的,今天java培训结束后总结如何写?就写到这里,希望能够帮助到即将毕业的同学们。

Java中full gc什么意思?

转发的~但能解决你的问题

除直接调用System.gc外,触发Full GC执行的情况有如下四种。

1. 旧生代空间不足

旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:

java.lang.OutOfMemoryError: Java heap space

为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。

2. Permanet Generation空间满

PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:

java.lang.OutOfMemoryError: PermGen space

为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。

3. CMS GC时出现promotion failed和concurrent mode failure

对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当这两种状况出现时可能会触发Full GC。

promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。

应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。

4. 统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间

这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。

例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。

当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。

除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。