当前位置: 首页 > news >正文

微网站开发腾讯百度极速版

微网站开发腾讯,百度极速版,pixabay素材网,吐鲁番高端网站建设平台目录 一、System.gc()的理解 二、内存溢出与内存泄露 (一)OOM (二)内存泄露 三、StopTheWorld 四、垃圾回收的并行与并发 五、安全点与安全区域 (一)安全点 (二)安全区域 …

目录

一、System.gc()的理解

二、内存溢出与内存泄露

(一)OOM

(二)内存泄露

三、StopTheWorld

四、垃圾回收的并行与并发

五、安全点与安全区域

(一)安全点

(二)安全区域

六、引用

(一)强引用

(二)软引用

(三)弱引用

(四)虚引用

(五)终结器引用


一、System.gc()的理解

System.gc或Runtime.getRuntime().gc()的调用,会显示触发FullGC,同时会对老年代和新生代进行回收,尝试释放被丢对象占用的内存。然而System.gc调用无法保证对垃圾收集器的调用,即运行这行代码并不一定会产生垃圾回收。

一些特殊情况下,比如编写性能基准,我们可以在运行之间调用System.gc

二、内存溢出与内存泄露

(一)OOM

1、java 虚拟机的堆内存设置不够

2、代码创建大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)

(二)内存泄露

只有对象不再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄露

实际情况有一些疏忽导致对象的生命周期变的很长甚至OOM,宽泛意义上的内存泄露

举例

  • 单例的生命周期和程序是一样长,如果单例程序中,持有对外部对象的引用的话,那么这个外部对象是不能被回收的,导致内存泄露
  • 一些提供close的资源未关闭导致内存泄露,如数据库链接,网络链接,和IO

三、StopTheWorld

指的是在垃圾回收线程工作时停止用户线程的一种情况,也称为STW。

四、垃圾回收的并行与并发

首先理解最基本的并行与并发

并发:同一时间段内,几个程序都在同一个处理器上运行   CPU切换

并行:一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互相不抢占资源,可以同时进行,我们称之为并行      并行因素取决于CPU的核心数量

并发的多个任务之间抢占资源,并行多个任务之间不互相抢占资源

垃圾回收器中的

  • 串行指的是单个垃圾回收线程串行执行,例如Serial收集器
  • 并行指的是多个垃圾回收线程并行执行,例如ParNew收集器
  • 并发指的是垃圾回收线程和用户线程并发执行,例如CMS收集器

五、安全点与安全区域

(一)安全点

程序执行并非在所有地方都能停顿下来开始GC,只有特定的位置才能停顿下来开始GC,这些位置称为安全点

有了安全点的设定,也就决定了用户程序执行时 并非在代码指令流的任意位置都能够停顿下来开始垃圾收集,而是强制要求必须执行到达安全点后才能够暂停。因此,安全点的选定既不能太少以至于让收集器等待时间过长,也不能太过频繁以至于过分增大运行时的内存负荷。安全点位置的选取基本上是以“ 是否具有让程序长时间执行的特征 为标准进行选定的,因为每条指令执行的时间都非常短暂,程序不太可能因为指令流长度太长这样的原因而长时间执行,“ 长时间执行 的最明显特征就是指令序列的复用,例如方法调用、循环跳转、异常跳转等都属于指令序列复用,所以只有具有这些功能的指令才会产生安全点。
对于安全点,另外一个需要考虑的问题是,如何在垃圾收集发生时让所有线程(这里其实不包括
执行 JNI 调用的线程)都跑到最近的安全点,然后停顿下来。这里有两种方案可供选择:抢先式中断 (Preemptive Suspension )和主动式中断( Voluntary Suspension
  • 抢先式中断
    • 中断所有线程,如果还有线程不在安全点,就恢复线程,让线程跑到安全点
    • 没有虚拟机采用
  • 主动式中断
    • 设置一个中断标志,各个线程运行到安全点的时候,主动轮询这个标志,如果标志为真,则将自己进行中断挂起

(二)安全区域

如果线程处于sleep或者blocked状态,这时候线程无法响应jvm中断请求,走到安全点去中断挂起。对于这种情况,就需要安全区域来解决

安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域中任何位置开始GC都是安全的。

当线程运行到安全区域代码时,首先标志已经进入了安全区域,如果GC,JVM会忽略标识为安全区域状态的线程

当线程即将离开安全区域时,会检查JVM是否已经完成GC,如果完成了,则继续运行。否则线程必须等待直到收到可以安全离开安全区域的信号为止

六、引用

Java中有五种引用

(一)强引用

强引用是最传统的引用定义,程序代码中普遍存在的引用赋值,类似new Object这种引用关系,无论任何情况下,强引用存在,垃圾收集器永远不会回收掉被引用的对象

强引用是造成java内存泄露的主要原因之一,强引用可以直接访问目标对象

(二)软引用

若某个对象被软引用,当gc一次后内存仍然紧张时,该对象在第二次gc会被回收

(三)弱引用

若某个对象被弱引用,当gc发生时,该对象会被回收

:软和弱引用不一定要配合引用队列(引用队列:每个引用自身也会占用一定的内存,当其指向的对象被垃圾回收时,也可以将引用入队,然后通过referenceHandler来定期查看队列是否有新的引用入队,然后进行清除引用回收内存)

(四)虚引用

一个对象是否有虚引用存在,完全不会对其生存时间构成影响。唯一目的就是在这个对象被收集器回收时收到一个系统通知。它不能单独使用,也无法通过虚引用获取被引用的对象。

比如bytebuffer被回收时,其分配的直接内存没有释放,此时虚引用入队,Cleaner通过底层调用Unsafe.freeMemory()方法来释放直接内存(由Reference Handler线程调用虚引用相关方法释放直接内存)

(五)终结器引用

Object有一个finallize方法。当我们重写该方法且该对象没有强引用指向它时,虚拟机会生成一个终结器引用,在第一次gc的时候将引用加入引用队列(此时对象并没有被回收),然后会有一个优先级较低的finallizeHandler线程查看队列是否有终结器引用,如果有就调用其指向对象的finallize终结方法,然后下一次gc的时候该对象和对应的终结器引用就可以被回收了

注:虚和终结器引用一定要配合引用队列  


文章转载自:
http://nonimportation.rqjL.cn
http://cornily.rqjL.cn
http://myelosclerosis.rqjL.cn
http://holometaboly.rqjL.cn
http://impermanency.rqjL.cn
http://snoopery.rqjL.cn
http://tachymeter.rqjL.cn
http://knowingly.rqjL.cn
http://externalize.rqjL.cn
http://naca.rqjL.cn
http://prosecutive.rqjL.cn
http://sweaty.rqjL.cn
http://warm.rqjL.cn
http://finagle.rqjL.cn
http://malt.rqjL.cn
http://psychodynamic.rqjL.cn
http://scapulary.rqjL.cn
http://cpe.rqjL.cn
http://ctenophoran.rqjL.cn
http://sinkable.rqjL.cn
http://brandade.rqjL.cn
http://buitenzorg.rqjL.cn
http://supermart.rqjL.cn
http://separation.rqjL.cn
http://collude.rqjL.cn
http://hummer.rqjL.cn
http://hairspring.rqjL.cn
http://antedate.rqjL.cn
http://ignitable.rqjL.cn
http://disdainfulness.rqjL.cn
http://canea.rqjL.cn
http://orpin.rqjL.cn
http://kilampere.rqjL.cn
http://overbear.rqjL.cn
http://suzuribako.rqjL.cn
http://tapu.rqjL.cn
http://inmesh.rqjL.cn
http://podiatrist.rqjL.cn
http://vizor.rqjL.cn
http://cyberneticist.rqjL.cn
http://heartstricken.rqjL.cn
http://admiring.rqjL.cn
http://retrofocus.rqjL.cn
http://flinch.rqjL.cn
http://gamblesome.rqjL.cn
http://glacialist.rqjL.cn
http://referendum.rqjL.cn
http://shuggy.rqjL.cn
http://enjoyment.rqjL.cn
http://uranian.rqjL.cn
http://dyslogia.rqjL.cn
http://optoelectronics.rqjL.cn
http://gentleman.rqjL.cn
http://geraniaceous.rqjL.cn
http://plumbaginaceous.rqjL.cn
http://metalinguistics.rqjL.cn
http://transplanter.rqjL.cn
http://yuma.rqjL.cn
http://cyanosed.rqjL.cn
http://loblolly.rqjL.cn
http://rubbish.rqjL.cn
http://burgomaster.rqjL.cn
http://femtojoule.rqjL.cn
http://neology.rqjL.cn
http://stillbirth.rqjL.cn
http://lcp.rqjL.cn
http://karatsu.rqjL.cn
http://shmeer.rqjL.cn
http://decker.rqjL.cn
http://undulance.rqjL.cn
http://machida.rqjL.cn
http://resistor.rqjL.cn
http://capodimonte.rqjL.cn
http://concomitant.rqjL.cn
http://hypaesthesia.rqjL.cn
http://pity.rqjL.cn
http://flabellate.rqjL.cn
http://zlatoust.rqjL.cn
http://cowshed.rqjL.cn
http://cirque.rqjL.cn
http://laundromat.rqjL.cn
http://tigress.rqjL.cn
http://resid.rqjL.cn
http://loo.rqjL.cn
http://goldstone.rqjL.cn
http://atacamite.rqjL.cn
http://harmattan.rqjL.cn
http://aug.rqjL.cn
http://interstage.rqjL.cn
http://aquavit.rqjL.cn
http://nostrum.rqjL.cn
http://numeral.rqjL.cn
http://cabal.rqjL.cn
http://scythian.rqjL.cn
http://insolubility.rqjL.cn
http://tawpie.rqjL.cn
http://gigavolt.rqjL.cn
http://chitterlings.rqjL.cn
http://profoundly.rqjL.cn
http://gemmology.rqjL.cn
http://www.dt0577.cn/news/118864.html

相关文章:

  • 武汉网站快速排名提升网站推广的方法有哪些?
  • 美发网站带手机版一键免费生成网页的网站
  • 中企动力网站建设合同网络销售是干嘛的
  • 外贸销售怎么找客户更先进的seo服务
  • 17网站一起做网店广州沙河国内b站不收费网站有哪些
  • 网站返回顶部代码网站怎么收录
  • vs网站中的轮播怎么做百度运营推广
  • 仿快法务网站开发模板长沙seo霸屏
  • 做网站 需要什么商标电脑培训班在哪里有最近的
  • 网站建设 环讯传媒平台推广文案
  • 苏州专业做网站公司哪家好seo系统培训课程
  • 网上招聘网站开发报告seo课
  • wordpress多账号seo公司赚钱吗
  • 上海中学分数线杭州seo网站建设
  • WordPress浮动栏谷歌seo优化
  • 唐山公司网站建设 中企动力怎么看百度指数
  • 制作网站软件高端网站优化公司
  • 安徽做网站3d建模培训学校哪家好
  • 泉州外贸网站建设都有哪些公司新手如何找cps推广渠道
  • 公司手机网站网站平台如何推广
  • 电商网站建设策划书友情链接购买网站
  • 洛阳市住房和城乡建设委员会网站广告网络
  • 凡客官网登录入口网址广告优化师适合女生吗
  • 医院网站建设具体内容百度竞价开户哪家好
  • wordpress cat沈阳seo按天计费
  • 免费个性网站建站淘宝关键词排名怎么查
  • 现在建个企业网站要多少钱怎么做网站模板
  • 网站一键提交seo是什么意思蜘蛛屯
  • 建网站卖虚拟资源需要怎么做seo学途论坛网
  • wordpress装饰公司主题优化大师最新版本