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

秦皇岛网站seo深圳市网络seo推广平台

秦皇岛网站seo,深圳市网络seo推广平台,wordpress网站登录,20个优秀微信小程序二、垃圾回收GC 在堆里面存放着java的所有对象实例#xff0c;当对象为“死去”#xff0c;也就是不再使用的对象#xff0c;就会进行垃圾回收GC 1.如何判断对象可以回收 1.1引用计数器 介绍 在对象中添加一个引用计数器#xff0c;当一个对象被其他变量引用时这个对象…二、垃圾回收GC 在堆里面存放着java的所有对象实例当对象为“死去”也就是不再使用的对象就会进行垃圾回收GC 1.如何判断对象可以回收 1.1引用计数器 介绍 在对象中添加一个引用计数器当一个对象被其他变量引用时这个对象的引用计数器加1。当某个变量不再引用这个对象时引用计数器减1。当这个引用计数变为0时这个对象就会被垃圾回收。 优点 判定效率很高 缺点 不完全准确当两个对象相互引用就判断失效了。当A引用B对象B引用A对象然后A和B不再被其他变量引用垃圾不会回收出现了垃圾回收失效。 1.2可达性分析算法Java 介绍 ①要确定一个根对象GC Roots肯定不会被垃圾回收的对象作为起始节点当垃圾回收前会对堆对象进行扫描判断这些对象是否被根对象引用如果没有被引用那么这个对象就可以垃圾回收。 ②java虚拟机是通过可达性分析判断存活对象 哪些对象可以作为GC Root? ①虚拟机栈中引用的对象 各个线程调用的方法参数局部变量 ②本地方法栈中native方法引用的对象 ③方法区中类静态属性引用的对象 Java类的引用类型静态变量 ④方法区中常量引用的对象 字符串常量池StringTable里的引用 ⑤所有被同步锁synchronized持有的对象 ⑥java虚拟机内部的引用核心类 1.3四种引用 1.强引用-不回收 介绍 程序代码中普遍存在的引用赋值“Object obj new Object()”这种引用关系。 特点 不回收只要沿着GC Root引用链能够找到这个对象这个对象就不会被垃圾回收。 2.软引用-内存不足回收 介绍 软引用间接引用是一些还有用但非必需的对象当被软引用关联的对象系统发生内存溢出钱会把这些对象列进回收范围进行二次回收。如果这次回收没有足够的内存会抛出内存溢出异常 特点 当垃圾回收后此时内存仍不够软引用关联的对象会进行垃圾回收内存不够才回收 3.弱引用-发现就回收 介绍 弱引用是一些还有用但非必需的对象生存到下一次垃圾回收为止。在系统进行垃圾回收时发现弱引用不管系统堆空间是否充足都会回收软引用关联的对象。 特点 当发生垃圾回收时弱引用关联的对象都会被回收。内存不管够不够都回收 4.虚引用-对象回收跟踪 介绍 当虚引用对象创建时会关联一个引用队列。虚引用在创建时必须提供引用队列作为参数。当垃圾回收准备回收一个对象时如果发现他是虚引用在垃圾回收后把这个虚引用加入引用队列通知应用程序对象的回收情况。 5.终结器引用-引用队列配合 介绍 用于实现对象的finalize()方法。当终结器对象创建时会关联一个引用队列。当准备回收一个对象时发现是终结器引用会把终结器引用对象放入引用队列此时对象没回收。由Finalizer线程调用该对象的finalize()方法第二次垃圾回收就会回收此对象。 2.垃圾回收算法 2.1标记清除 什么时候垃圾回收 扫描整个堆对象的过程中如果发现对象被GC Root引用了需要保留。如果这个对象没有被GC Root引用就要进行垃圾回收。 标记清除算法的两个阶段 ①把没有引用的对象标记为垃圾。 ②把垃圾对象占用的空间释放清除 ③释放不是空间清0而是把起始地址记录下来然后将来把创建的新对象存储这个位置 优点 垃圾回收速度快 缺点 产生内存碎片 2.2标记整理 标记整理两个阶段 ①把没有引用的对象标记为垃圾 ②把可用的对象向前移动让内存更加紧凑。连续的空间变多。 优点 没有内存碎片 缺点 对象整理过程中需要移动垃圾回收效率低。 2.3复制 复制两个阶段 ①把没有引用的对象标记为垃圾 ②把活着的内存分为两块from区和to区。把from区存活的对象复制到to区。然后清空from区然后交换from和to的位置 优点 没有内存碎片 缺点 占用双倍内存空间 3.分代垃圾回收 介绍 垃圾回收时JVM结合3种算法协程工作。通过分代的垃圾回收机制把堆内存划分为2块新生代和老年代新生代对象用完丢弃划分为3个区域伊甸园幸存区From幸存区To。 老年代对象长时间使用 不同的区域算法不同。 工作机制 ①创建新的对象占用伊甸园的内存空间当伊甸园内存满时触发垃圾回收Minor GC。沿着GC Roots引用链去找如果对象没有被引用就进行垃圾标记。然后采用复制的算法把伊甸园存活的对象复制到幸存区To中并且对象寿命加1。然后交换from和to的位置。 ②当伊甸园内存空间再次溢出时触发第二次垃圾回收Minor GC。沿着GC Roots根引用链进行扫描伊甸园和幸存区。把存活的对象复制到幸存区To中并且对象寿命加1。然后交换from和to的位置。 ③幸存区的对象寿命超过了阈值15对象利用率高。晋升到老年代。对象长时间使用 ④当新生代和老年代内存要溢出时触发Full GC垃圾回收。 总结 ①对象首先分配在伊甸园区域 ②新生代空间不足时触发Minor gc。伊甸园和from存活的对象使用复制算法copy到to中。存活的对象年龄加1.交换from和to。 ③minor gc会引发stop the world暂停其他用户的线程。垃圾回收结束用户恢复运行。 ④当对象寿命超过阈值时会晋升到老年代最大寿命是15 ⑤老年代空间不足触发Minor gc内存仍不足那么full gc. 相关JVM参数 4.垃圾回收器 4.1串行垃圾回收器 介绍 ①单线程垃圾回收器 ②堆内存较小适合个人电脑 ③开启串行垃圾回收器 -XX:UseSerialGC Serial SerialOld Serial工作新生代复制算法 SerialOld 工作在老年代标记整理算法 工作流程 当堆内存要溢出时触发垃圾回收。让其他线程在安全点停止下来等待垃圾回收线程的结束。 4.2吞吐量优先并行 介绍 ①多线程 ②堆内存较大多核cpu支持 ③让单位时间内STW时间最短 工作流程 多核CPU中有4个线程运行。当堆内存要溢出时触发了垃圾回收。用户线程在安全点停止。此时的垃圾回收器会开启多个线程跟CPU核数相关进行垃圾回收。然后恢复其他线程的运行。 相关参数 -XX:UseParallelGC ~ -XXUseParallelOldGC  开启吞吐量优先垃圾回收器 -XX:UseAdaptiveSizePolicy  自适应大小策略新生代 -XX:GCTimeRatioratio  调整吞吐量 -XX:MaxGCPauseMillisms 最大暂停毫秒数 -XX:ParallelGCThreadsn 运行时线程数 4.3响应时间优先 介绍 ①多线程 ②堆内存交大多核cpu支持 ③尽可能让单次STW时间变短 相关参数 -XX:UseConcMarkSweepGC~-XX:UseParNewGC~SerialOld 开启响应时间优先回收器 -XX:ParallelGCThreadsn~-XX:ConcGCThreadsthreads 线程数 -XX:CMSInitiatingOccupancyFractionpercent 何时进行垃圾回收 -XX:CMSScavengeBeforeRemark 新生代垃圾回收 工作流程 当老年代发生内存泄漏其他线程到达安全点暂停下来垃圾回收器执行初始标记用户线程恢复运行。垃圾回收线程进行并发标记然后进行重新标记工作。垃圾回收线程进行并发清理。 5.G1垃圾回收器 简介 Garbage First JDK 9默认 适用场景 ①同时注重吞吐量和低延迟默认暂停目标是200ms ②超大堆内存会将堆划分多个大小相等的Region ③整体上是标记整理算法两个区域之间是复制算法。 相关JVM参数 -XX:UseG1GC 开启G1垃圾回收 -XX:G1HeapRegisonSizesize 设置划分区域的大小 -XX:MaxGCPauseMillstime JVM最大暂停时间的目标值 5.1 G1垃圾回收阶段 1.Young Collection 新生代垃圾收集 ①、G1会把堆内存划分成多个相等的区域。每个区域独立作为伊甸园幸存区老年代 ②、新创建的对象会存储在伊甸园当伊甸园内存满时会触发新生代垃圾回收机制会STW。 ③、伊甸园存活的对象使用copy算法到幸存区。 ④、当幸存区的内存溢出时触发新生代垃圾回收。幸存区对象存活年龄超过一定时间会晋升到老年代 2. Young CollectionConcurrent Mark新生代垃圾收集并发标记 ①在Young GC时进行GC Root的初始标记 ②老年代占用堆空间比例达到阈值时进行并发标记不会STW -XX:InitiatingHeapOccupancyPercentpercent(默认45%) 3.Mixed Collection混合收集 介绍 会对E、S、O进行全面垃圾回收 ①最终标记会STW ②拷贝存活会STW -XXMaxGCPauseMillisms E伊甸园区的存活对象通过复制算法到幸存区中 S幸存区存活的对象复制到另一个幸存区符合晋升条件的到老年区 O老年代区把存活对象复制到另一个老年代区 优先收集垃圾最多的区目的是达到暂停时间段的目标 5.2 Full GC      1.SerialGC ①新生代内存不足发生的垃圾收集—minor gc ②老年代内存不足发生的垃圾收集—full gc 2.ParallelGC ①新生代内存不足发生的垃圾收集—minor gc ②老年代内存不足发生的垃圾收集—full gc 3.CMS ①新生代内存不足发生的垃圾收集—minor gc ②老年代内存不足并发失败后才会full gc。 4.G1 ①新生代内存不足发生的垃圾收集—minor gc ②老年代内存不足老年代内存跟堆内存占比达到45%触发并发标记和混合收集阶段。回收速度垃圾产生速度并发垃圾收集阶段。回收速度垃圾产生速度此时是full gc 5.3Young Collection跨代引用 1.新生代回收的跨代引用(老年代引用新生代) ①根对象有部分是来自老年代老年代存活对象比较多遍历效率低。所以采用CardTable把老年代区域进行细分成一个个的card。每个card是512k。如果老年代的对象引用了新生代的对象就会把这个card标记为脏卡。只关注脏卡减少搜索范围。 ②脏卡引用了新生代的对象。新生代通过Remembered Set知道对应的脏卡。通过脏卡区域遍历GC Roots 5.4 Remark-重新标记 并发标记阶段的对象处理状态 黑色已经处理完成存活的对象。灰色是处理当中的。白色是尚未处理的垃圾。 在并发标记阶段可能出现B对C引用接着断开后C成为垃圾然后A对C引用。此时C被判成垃圾了。 这个时候需要用到remark Remark:对对象进行进一步检查当对象引用发生改变时会给引用提供一个写屏障将C加入队列接着进入重新标记阶段对队列对象进行检查有强引用的不标记为垃圾。 5.5 JDK8 u20字符串去重 指令 -XX:UseStringDeduplication 规则 ①将所有新分配的字符串放入一个队列 ②当新生代回收时G1并发检查是否有字符串重复 ③如果值一样让他们引用同一个char[] 优缺点 优点节约大量内存 缺点多占用CPU时间新时代回收时间略微增加 跟String.intern()不一样 ①String.intern()关注的是字符串对象 ②字符串去重关注的是char[] ③JVM内部使用不同的字符串表 5.6 JDK8 u40并发标记类卸载 所有对象都经过并发标记后知道哪些类不再使用。当一个类加载器所有类不再使用则卸载它所加载的所有类 -xx:ClassUnloadingWithConcurrentMark默认启用 5.7 JDK8 u60 回收巨型对象 ①一个对象大于region的一半时成为巨型对象。 ②G1不会对巨型对象进行拷贝 ③回收时优先考虑 ④G1会跟踪老年代所有incoming引用。这样老年代incoming引用为0的巨型对象在新生代垃圾回收处理掉。 5.8 JDK9 并发标记起始时间的调整 ①并发标记必须在堆空间占满前完成否则退化为FullGC ②JDK 9之前需要使用 -XX:InitiatingHeapOccupancyPercent ③JDK 9可以调整 -XX:InitiatingHeapOccupancyPercent 用来设置初始值 进行数据采样并动态调整 总会添加一个安全的空挡空间
http://www.w-s-a.com/news/863688/

相关文章:

  • 楚雄 网站建设广告设计一般人能学吗
  • 热搜榜排名前十山东seo多少钱
  • 衡水哪有建网站的吗企业信息系统英文
  • 有模板怎么建站wordpress媒体库图片路径
  • 怎么做网站h汉狮企业网站营销的实现方式
  • 新津县建设局网站怎么做区块链网站
  • 网站设计与制作是什么专业广州优化网站
  • 腾讯有做淘宝客网站吗网站开发包
  • 网站整体营销方案网站建设百度贴吧
  • 宣传式网站养生网站模板
  • 临猗网站建设天津做网站哪家服务好
  • 郑州做网站九零后用织梦建设网站的步骤
  • 莱芜网站优化加徽信xiala5江都网站制作
  • 网站开发工具书焦作网站开发公司电话
  • 石狮网站建设报价百度爱采购怎么优化排名
  • 广州网站开发系统如何建设百度网站
  • 免费建立一个个人网站网站流量图怎么做
  • 微信网站建设公司首选网站后台更新 前台不显示
  • 撰写网站专题活动策划方案未成年做网站
  • 免费在线响应式网站自助建站网页设计与网站建设试卷
  • 四川省肿瘤医院搜索优化整站优化
  • 新钥匙建站深圳创业补贴政策2023
  • 建网站需要准备什么网站三个月没排名
  • 网站运营规划网站推广的手段
  • cvm可以做网站服务器吗网片围栏
  • 培训前端网站开发网站开发 群
  • 成都武侯区网站建设wordpress菜单分类目录
  • 牡丹江市西安区建设局网站给公司做的东西放到自己网站上
  • 做网站的前景如何郑州seo规则
  • 学校户网站建设方案专业设计服务