java总结之full(java的总结)

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

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

可以放到任意包

据我观察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的时候。

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

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

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

除直接调用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。

原创文章,作者:LY5OE,如若转载,请注明出处:https://www.506064.com/n/126437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LY5OE的头像LY5OE
上一篇 2024-10-03 23:08
下一篇 2024-10-03 23:08

相关推荐

  • Python字符串为空

    Python是一种非常强大的编程语言,它被广泛应用于各种领域,包括Web开发、数据科学和机器学习等。在Python中,字符串是一种基本数据类型,它通常用于存储文本或字符数据。但是,…

    编程 2024-10-04
  • 考二级c语言这些内容应该会,如何备考二级c语言

    本文目录一览: 1、计算机二级C语言考试内容有哪些? 2、计算机二级考试(c语言)要考些什么? 3、计算机2级C语言,考些什么? 4、计算机二级(C语言)都考哪些内容? 计算机二级…

    编程 2024-10-04
  • java极光推送,极光推送demo

    本文目录一览: 1、为什么要用极光推送?不可以自己做吗? 2、java手机消息推送怎么做 3、极光推送怎么实现的 4、java消息定时推送怎么实现 5、Java web 服务端消息…

    编程 2024-12-01
  • 用C语言实现字符串复制的函数

    一、将字符串a复制为字符串b 在C语言中复制字符串的方式有两种,一种是通过库函数strcpy()实现,另一种是自己编写字符串复制函数。下面分别介绍这两种方式: (1)使用strcp…

    编程 2024-10-04
  • Z-buffer算法的原理、消隐方式、以及代码示例

    一、Z-buffer算法原理 Z-buffer算法是一种广泛应用于3D图形学中的消隐算法,使用一个缓冲区来记录每个像素的深度信息,从而实现重叠三维物体的正确显示。其原理如下: 首先…

    编程 2024-10-03
  • Python字符串转时间详解

    一、Python字符串转时间戳毫秒 Python中将字符串转为时间戳的方法是使用time模块中的strptime和mktime函数。strptime函数将字符串解析成时间元组,然后…

    编程 2024-11-29
  • php代码实现熊掌自动提交,php自动提交表单

    本文目录一览: 1、熊掌号api设置,用 php推送后上传到根目录后,打开显示的是文件源代码,这是什么情况? 2、如何用PHP自动提交表单内容? 3、php如何让留存显示表单中的数…

    编程 2024-12-01
  • java中反射,java中反射的概念

    本文目录一览: 1、java 中反射机制和内省机制的区别是什么? 2、在JAVA中,怎么利用反射获取一个方法? 3、什么是java的反射? 4、北大青鸟java培训:Java的反射…

    编程 2024-10-03
  • dwg文件显示空白我i发打开,dwg文件突然消失

    本文目录一览: 1、为什么安装天正之后,直接双击图纸文件打开之后是一个空白的dwg? 2、cad的文件(dwg)图标变白了是怎么回事 3、ai格式导出dwg文件,打开dwg文件显示…

    编程 2024-11-25
  • Python中which模式的使用场景

    一、which模式简介 which模式是Unix和Linux操作系统中常见的命令行工具,用于查找某个命令或程序在系统中的位置。该命令通过查询PATH环境变量中所列出的目录,找出第一…

    编程 2024-10-04

发表回复

登录后才能评论