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

网站建设指数是什么意思帮人做ppt的网站

网站建设指数是什么意思,帮人做ppt的网站,有做销售产品的网站,广州网站优化系统文章目录 0. 为什么要有垃圾回收?1. 垃圾回收哪个内存区域?2. 如何找到垃圾(死亡对象的判断)2.1 引用计数法2.2 可达性分析法2.3 两种算法的差别 3. 如何清理垃圾(死亡对象的回收)3.1 标记-清楚法3.2 复制法3.3 标记-整理法 4. JVM使用的回收方法4.1 什么是分代回收4.2 哪些对… 文章目录 0. 为什么要有垃圾回收?1. 垃圾回收哪个内存区域?2. 如何找到垃圾(死亡对象的判断)2.1 引用计数法2.2 可达性分析法2.3 两种算法的差别 3. 如何清理垃圾(死亡对象的回收)3.1 标记-清楚法3.2 复制法3.3 标记-整理法 4. JVM使用的回收方法4.1 什么是分代回收4.2 哪些对象会进入新生代哪些对象会进入老年代4.3 工作过程 5. 垃圾回收器是什么总结 0. 为什么要有垃圾回收? JVM 中的垃圾回收机制, 可以自动的释放不再使用的内存. 可以有效的防止程序中内存泄漏问题. 本文我们就来聊一下垃圾回收机制. 内存泄漏Memory Leak是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放造成系统内存的浪费导致程序运行速度减慢甚至系统崩溃等严重后果。 关注收藏, 开始学习吧 1. 垃圾回收哪个内存区域? Java运行时内存的有许多区域。对于程序计数器、虚拟机栈、本地方法栈这三部分区域而言其生命周期与相关线程有关随线程而生随线程而灭。并且这三个区域的内存分配与回收具有确定性因为当方法结束或者线程结束时内存就自然跟着线程回收了。 因此本文所讲的有关内存分配和回收关注的为Java 堆 与 方法区 这两个区域。 垃圾回收, 应该分为两步: 找到垃圾.清理垃圾. 对于 Java 来说, 垃圾回收, 回收的是 “对象”, 而不是 “字节”. 所以我们会认为 “垃圾” 指的就是 “已经死亡的对象”, 那么我们如何判定这个对象是否已经死亡, 是否是垃圾呢? 2. 如何找到垃圾(死亡对象的判断) 如果一个对象, 在后续的代码中, 不会被继续使用到了, 就可以视为是垃圾了. 那么我们该怎样判断这个对象不会再被继续使用到了呢? 在 Java 中, 使用一个对象, 只有一种途径, 就是搞个引用指向它, 然后通过引用来访问这个对象. 一个对象, 只要有引用指向, 就无法确保后续孩会不会进行使用.一个对象, 如果没有引用指向, 那么这个对象以后一定无法被使用. 所以我们可以认为, 一个对象, 如果没有任何引用指向它, 就代表着之后也不会被使用到了, 那它就是一个 “垃圾” 了. 接下来我们来介绍两个主流的判断方法. 2.1 引用计数法 该方法简单来说, 就是给每个对象中安排一个计数器, 每次有引用指向它时, 内置的计数器就 1. 每次有引用被销毁时, 计数器就 -1. 当计数器成为 0 时, 意味着该对象就变成垃圾了. 引用计数法实现简单, 判定效率也比较高, 在大部分情况下都是一个不错的算法, 比如 Python 语言就采用引用计数法进行内存管理. 但上述方案, 并不是 JVM 中判断垃圾所使用的方案. 是因为引用技术方案, 还存在着两个无法忽视的问题: 空间利用率会比较低, 浪费了不必要的内存空间. 如果一个对象本体只有 4 个字节时, 给引用计数分配 2 个字节, 就相当于浪费了 50% 的内存空间.可能会存在循环引用的问题, 导致对象不能被正常识别为垃圾. 观察循环引用问题. 当前是简单画了一个内存草图, 我们执行左面的伪代码, 就会造成右面的内存布局. 可以看到, 明明已经没有引用指向对象了, 可是对象中的计数器, 还没有到 0. 此时这俩对象的引用计数不为 0, 就不能被视为垃圾, 也就无法被识别清理. 2.2 可达性分析法 上面我们说到, Java并不是采用引用计数法来判断对象是否已经死亡, 其采用的其实是 “可达性分析法”. JVM 首先会从现有代码中能直接访问到的引用出发, 尝试遍历所有能访问的对象. 只要这个对象能被访问到, 就被视为 “可达”, 反之为不可达. 完成整个遍历后, 视所有 “不可达” 的对象为垃圾. 此算法的核心思想为 : 通过一系列称为 “GC Roots” 的对象作为起始点从这些节点开始向下搜索搜索走过的路径称之为引用链当一个对象到 GC Roots 没有任何的引用链相连时(从GC Roots到这个对象不可达)时证明此对象是不可用的。以下图为例 对象 Object5-Object7 之间虽然彼此还有关联但是它们到GC Roots是不可达的因此他们会被判定为可回收对象。 在 Java 中可作为GC Roots的对象包含下面几种: 栈上的局部变量.方法区中类静态属性引用的对象方法区中常量引用的对象。 2.3 两种算法的差别 引用计数消耗的是空间, 通过引用计数的数值, 不需要持续判断, 就可以非常快速的得知这个对象是否是垃圾.可达性分析消耗的是时间, 不消耗额外的空间开销, 通过持续性的扫描, 就可以得知哪些对象是垃圾. 3. 如何清理垃圾(死亡对象的回收) 我们找到垃圾之后, 就应该对它进行清理了. 目前主流的一些清理方法有以下几种. 3.1 标记-清楚法 标记-清除算法是最基础的收集算法。算法分为标记和清除两个阶段 : 首先标记出所有需要回收的对象在标记完成后统一回收所有被标记的对象。但该算法也有一些问题. 标记-清除算法的不足主要有两个 : 效率问题 : 标记和清除这两个过程的效率都不高空间问题 : 标记清除后会产生大量不连续的内存碎片空间碎片太多可能会导致以后在程序运行中需要分配较大对象时无法找到足够连续内存而不得不提前触发另一次垃圾收集。 在申请内存时, 都是申请的连续内存空间, 释放内存, 就可能会破坏原有的连续性, 导致 “有内存, 但无法申请”. 假设当前剩余四块空间(黑色的)可以申请, 每个空间大小是 1mb, 总的空闲空间是 4mb, 但其实实际上已经无法继续分配大于 1mb 的内存了. 这种问题就叫做 “内存碎片” 问题. 3.2 复制法 复制算法是为了解决标记-清理的问题。它将可用内存按容量划分为大小相等的两块每次只使用其中的一块。 就是把一个内存, 分成两份空间 A 和 B, 只用一份A. 清理时, 把 A 中存活下来的对象全部复制到 B 中, 把 A 中内存统一释放 接下来就继续使用 B 空间. 再次清理时, 把存活下来的对象再复制回 A 中去, 把 B 中资源统一释放. 当前流程一直循环进行. 这个算法虽然提高了一些效率, 但也有些不足的地方, 内存李永利比较低, 他真正能利用的内存空间, 只有原先内存空间的一半, 很浪费内存空间.在对象存活率较高时会进行比较多的复制操作, 效率会变低. 3.3 标记-整理法 针对 “标记-清楚” 提出了一种为标记-整理的算法。标记过程仍与 “标记-清除” 过程一致但后续步骤不是直接对可回收对象进行清理而是让所有存活对象都向一端移动然后直接清理掉端边界以外的内存。 这样的方式, 避免了刚才复制算法中内存利用率比较低的问题. 但是也有个很明显的个问题, 就是这里搬运的成本, 也是比较高的. 4. JVM使用的回收方法 设计 JVM 中垃圾回收算法时, 虽然已经有了这么多的回收机制, 但还是没有哪个方法能让设计 JVM 的大佬们满意, 于是他们想了个办法, 集百家之长, 结合上面的回收方案, 搞一个综合性质的方案, 在不同的场景下, 使用不同的回收方式, 做到扬长而避短. 4.1 什么是分代回收 分代算法和上面讲的 3 种算法不同分代算法是通过区域划分实现不同区域和不同的垃圾回收策略从而实现更好的垃圾回收。对于不同的情况设置更符合该情况的规则从而达到更高的效率这就是分代算法的设计思想。 当前 JVM 垃圾收集都采用的是分代收集(Generational Collection)算法这个算法并没有新思想只是根据对象存活周期的不同将内存划分为几块。一般是把 Java 堆分为新生代和老年代。在新生代中每次垃圾回收都有大批对象死去只有少量存活因此我们采用复制算法而老年代中对象存活率高、没有额外空间对它进行分配担保就必须采用标记-清理或者标记-整理算法。 4.2 哪些对象会进入新生代哪些对象会进入老年代 新生代一般创建的对象都会进入新生代老年代大对象和经历了 N 次一般情况默认是 15 次垃圾回收依然存活下来的对象会从新生代移动到老年代。 4.3 工作过程 堆内存为两个区新生代 (Young) 和老年代 (Old)新生代默认占堆内存的 1/3老年代默认占堆内存的 2/3新生代又分为 Eden 区、Survivor From区、Survivor To区默认比例是 8:1:1. 先理解两种GC: Minor GC 又称为 新生代GC : 指的是发生在新生代的垃圾收集。因为Java对象大多都具备朝生夕灭的特性因此Minor GC(采用复制算法)非常频繁一般回收速度也比较快。Full GC 又称为 老年代GC 或者 Major GC : 指发生在老年代的垃圾收集。出现了 Major GC经常会伴随至少一次的 Minor GC。Major GC 的速度一般会比 Minor GC 慢10倍以上。 工作过程 所有新创建的对象都在 Eden 区当 Eden 区内存满后将 Eden 区 Survivor From 区存活的对象复制到 Survivor To区清空 Eden 区与 Survivor From 区同时 Survivor From 与 Survivor To 分区进行交换每次 Minor GC 存活对象年龄加 1当年龄达到 15(默认值)岁时被移到老年代当 Eden 的空间无法容纳新创建的对象时这些对象直接被移至老年代当老年代空间占用达到阈值时触发 Full GC以上流程循环执行。 5. 垃圾回收器是什么 如果说上面我们讲的收集算法是内存回收的方法论那么垃圾收集器就是内存回收的具体实现。 垃圾收集器的作用垃圾收集器是为了保证程序能够正常、持久运行的一种技术它是将程序中不用的死亡对象也就是垃圾对象进行清除从而保证了新对象能够正常申请到内存空间。 以下这些收集器是不同版本推出的重要的垃圾收集器, 读者了解一下即可. 总结 ✨ 本文重点讲解了垃圾回收的一些概念, 包括怎么找垃圾, 怎么清理垃圾等等. ✨ 想了解更多知识, 请持续关注博主, 本人会不断更新学习记录, 跟随我一起不断学习. ✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习. 再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!
http://www.pierceye.com/news/262647/

相关文章:

  • 新乡建设工程信息网站kindeditor wordpress
  • 做一个京东这样的网站需要多少钱上网导航网页是哪家公司
  • 网站开发到上线的流程外贸网站 开源站建设行吗
  • 神华科技网站建设个人网站做哪些流程
  • 怎么查看网站空间是否到期如何用百度上传图片做网站外链
  • 可以做问卷挣钱的网站酒泉建设局网站
  • 阿里万网怎么做网站向百度提交网站
  • 杭州模板网站好网站漂浮广告怎么做
  • a站为什么不火了站群宝塔批量建站
  • 免费网站建设pptlinkcat wordpress
  • html5 网站大连在哪里哪个省
  • php个人网站源码国家企业信用信息公示系统官网山东
  • 丹东做网站哪家好事件营销的方法
  • wordpress建立网站wordpress 媒体文件夹
  • 响应式网站 框架天津市建设行业联合会网站
  • mc做图的网站深圳注册公司推荐
  • 广告公司怎么设置网站关键字网片的重量计算公式
  • 外贸网站都有哪些wordpress侧边栏选项卡
  • 北京网站建设 降龙网asp.net建网站
  • 中小网站建设新手自己做网站
  • 建网站手机如何建设网站并与数据库相连
  • 网站建设公司的客户个人网站做哪些内容
  • 外贸公司网站推广怎么让公司建设网站
  • 网站开发语长沙网站建设商城
  • 手机刷网站排名软件建设银行网站怎么登录密码忘了怎么办
  • 利用海康威视做直播网站鞍山网站建设找金航
  • 做网站大概花多少钱商圈云分销软件下载
  • 万户网站制作网站跳转怎么做
  • 网站开发全程设计做网站推广的公司发展前景
  • 电商设计网站培训建设网站域名