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

域名备案查询站长工具公司网络推广的作用

域名备案查询站长工具,公司网络推广的作用,甘肃省住房和城乡建设厅网站职称证查询,一些你不知道的网站Java堆内存结构 java堆内存是垃圾回收器管理的主要区域,也被称为GC堆。 为了方便垃圾回收,堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配,达到一定存活时长后会移入老年代,而永久代存储的是类的元数…

Java堆内存结构

java堆内存是垃圾回收器管理的主要区域,也被称为GC堆。

为了方便垃圾回收,堆内存被分为新生代、老年代和永久代。

新创建的对象的内存会在新生代中分配,达到一定存活时长后会移入老年代,而永久代存储的是类的元数据,在JDK1.8之后永久代被元空间取代,元空间不再位于堆内存中,而是位于本地内存,它们都是方法区的实现。

如何判断一个对象是垃圾呢?

堆中几乎存放了所有的对象实例,对堆进行垃圾回收首先是去判断哪些对象是垃圾。

引用计数法

在对象的对象头中会维护一个引用计数器,每有一个地方引用它,计数器就会加1,当断开引用了就会减1,当计数器的值为0时,说明这个对象是个垃圾。

这种方法简单,效率高,但是会有循环引用的问题。如果一个a对象和b对象之间互相引用,除此之外没有任何引用,那么ab对象的引用计数器的值都为1,就得不到释放。

可达性分析算法

以GC Roots对象为起点,向下搜索,节点走过的路劲成为引用链,如果一个对象没有引用链可以到达GC Roots对象,那么这个对象就是垃圾。

哪些对象是GC Roots对象?

  • 虚拟机栈中(栈帧中局部变量表)引用的对象
  • 本地方法栈中引用的对象
  • 方法区中的静态变量和常量引用的对象
  • 同步锁持有的对象

引用的类型

判断对象是否是垃圾还与引用的类型有关。

强引用:当我们去new对象的时候,创建的引用就是强引用,如果一个对象具有强引用,垃圾回收器宁愿抛出OOM错误也不会回收这个对象。

软饮用:如果内存充足就不回收,内存不足就会被回收。

弱引用:不管内存充不充足都会被回收。

虚引用:"虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。

垃圾回收算法

标记-清除算法

通过可达性分析算法找到存活对象,也就是在GC Roots引用链上的对象,标记它们,然后清除未标记的对象。

这种算法的效率较高,而且垃圾回收后有太多内存碎片,如果是数组这种需要连续内存的对象,可能找不到内存空间。

标记-整理算法

找到存活的对象,标记它们,并让它们向同一端移动,然后清除端边界之外的内存。

这种算法解决了内存碎片化的问题,但由于要整理,所以效率不高,适合老年代这种垃圾回收频率不高的场景。

标记-复制算法

标记-复制算法将内存分为相同的两块,只使用其中一块内存,当那一块内存使用完之后,找到存活的对象,标记它们,然后把它们移到另一块内存上,再把之前使用的那块内存全部清除掉。

这种算法效率较高,而且内存没有碎片化,但是内存使用率太低,只有一半。

分代收集算法

通过对象存活时间的不同将内存分为了新生代和老年代。

其中新生代又分为伊甸园区(eden),幸存者区(S0、S1)。

新创建的对象会被分配到eden区,当eden区内存不足时,会采用标记-复制算法将eden区和
s0区(第一次复制没有对象)的存活对象复制到s1区,然后清除eden区和s0区的内存。之后又创建对象,当eden又满了之后就把eden区和s1区的存活对象复制到s0区,清除eden区和s1区的内存。由此循环,如果存活对象多次都没有被回收,会移到老年代中。

为什么要分代收集?为什么堆要被分为新生代和老年代?
因为这样可以根据各个年代的特点选择不同的垃圾回收算法,新生代的对象存活率低,就可以选择标记-复制算法,复制少量存活对象就可以完成垃圾回收;而老年代对象存活率高,不适合复制算法,采用标记-清除或者标记-整理算法。

什么是Minor GC、Full GC?
当进行垃圾回收的时候,会暂停所有线程去完成垃圾回收。
Minor GC :发生在新生代的垃圾回收,当eden区满了会触发,暂停时间较短。
Full GC:对新生代和老年代进行完整的垃圾回收,当老年代内存不足时会触发,暂停时间长,要尽量避免。

垃圾回收器

Serial垃圾回收器

serial垃圾回收器也叫串行垃圾回收器,是一个单线程的垃圾回收期,进行垃圾回收的时候,会暂停其他所有的线程,直到收集结束。

Parallel垃圾回收器

也叫并行垃圾回收器,使用多线程进行垃圾回收,垃圾回收时也会暂停其余所有的线程。
JDK1.8默认使用此垃圾回收器。

CMS垃圾回收器

也叫并发垃圾回收器,它的暂停时间很短,GC线程和用户线程并发工作。

CMS垃圾回收器的回收过程分为四个阶段:
初始标记:去标记和GC Roots对象直接连接的对象,会暂停其余线程,但时间很短。
并发标记:之后根据引用链标记其余的可达对象,不会暂停其余线程。
重新标记:防止在并发标记期间有新对象创建而漏标,会暂停其余线程,暂停时间短。
并发清除:清除未标记的对象,不会暂停其余线程。

G1垃圾回收器

G1垃圾回收器是JDK9之后默认的垃圾回收器。它将内存分为多个区域,每个区域都可以充当eden区,Survivor区,old区,humongous区,其中humongous区专门用于存放大对象。

G1垃圾回收器采用复制算法回收垃圾,主要有两种回收方式:Young GC和Mixed GC

G1垃圾回收流程
Young GC(对年轻代的回收)
首先新创建的对象会被分配到eden区,当eden区内存达到阈值后,触发Young GC,会选一个空区域作为幸存者区,然后将存活对象复制到幸存者区,并释放eden区的内存。

                 

当eden再次达到阈值,触发Young GC,选出一个新的空区域作为幸存者区,将eden区和旧幸存者区的存活对象复制到新幸存者区,并释放eden和旧幸存者区的内存,当经过多次Yong GC后还存活的对象会被复制到老年代。

Mixed GC(对年轻代和部分老年代的回收)
当老年代的内存达到一个阈值之后,会去并发标记老年代中的存活对象,无需暂停用户线程。
然后会去重新标记,防止并发标记导致漏标,此时会暂停用户线程。

之后进行Mixed GC,对年轻代部分老年代进行垃圾回收。对于年轻代,将eden区和旧幸存者区的存活对象复制到新幸存者区,并释放内存;对于老年代,不会去回收所有的老年代,而是选出存活对象较少的老年代,将它们的存活对象复制到一个新的老年代,然后释放内存。

http://www.dtcms.com/wzjs/273552.html

相关文章:

  • 江西省住房和城乡建设厅网站首页企业网络推广的方法
  • 厦门网站建设小程序开发网推渠道
  • 如何用手机建立网站百度百科官网首页
  • 网站建设视频教程最新深圳门户网站
  • 安徽华夏网站建设重庆seo网络推广
  • 网站建设中的图片seo快速优化
  • 沈阳黄页88企业名录西安seo推广公司
  • 撰写网站建设技术解决方案抖音seo软件
  • 陕西省建设工程质量安全监督总站网站郑州网站运营实力乐云seo
  • 商丘哪里做网站比较好变现流量推广app
  • 用网站做淘宝客怎么样免费发广告的网站
  • 南京网站建设 ww郑州百度分公司
  • 潍坊企业网站建设阳西网站seo
  • 网站内容建设需要注意哪些问题长沙关键词优化服务
  • 郑州做网站公司汉狮价格软文推广发稿
  • wordpress顶部图像取消不seo营销排名
  • 爱网站搭建网站注册页面
  • 企业建设网站意义四年级摘抄一小段新闻
  • 公司网站怎样做维护免费海报模板网站
  • 中小型网站设计公司外链交易平台
  • 湖南营销型网站建设 皆来磐石网络优化公司
  • 怎么做网站代理企业网络组建方案
  • 西宁圆井模板我自己做的网站深圳网站建设维护
  • 商场网站建设公司如何进行市场推广
  • 改动网站标题网上培训课程平台
  • 哈尔滨快速建站案例枸橼酸西地那非片的功效与作用
  • 加盟网站建设公司seo快速优化文章排名
  • 网站域名301是什么意思互联网营销是做什么的
  • 重庆建设执业资格注册中心网站竞价托管哪家效果好
  • html网站开发广州网站排名优化报价