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

APP网站怎么做环保网页设计

APP网站怎么做,环保网页设计,网站开发项目费用预算,门户网站制作流程博客在JVM专题九#xff1a;JVM分代知识点梳理中#xff0c;我们主要介绍了JVM为什么采用分代算法#xff0c;以及相关的概念#xff0c;本篇我们将详细拆分各个算法。 垃圾回收的概念 垃圾回收#xff08;Garbage Collection#xff0c;GC#xff09;确实是计算机编程中的… 在JVM专题九JVM分代知识点梳理中我们主要介绍了JVM为什么采用分代算法以及相关的概念本篇我们将详细拆分各个算法。 垃圾回收的概念 垃圾回收Garbage CollectionGC确实是计算机编程中的一项重要技术它自动化了内存管理过程解决了手动内存管理如在C或C中的复杂性和潜在错误。 在没有垃圾回收的情况下程序员需要负责申请和释放内存这不仅容易出错还可能导致内存泄漏和其他资源管理问题。垃圾回收的引入使得程序员可以更专注于程序逻辑而不是内存细节。 正如你提到的垃圾回收的概念最早可以追溯到1960年的Lisp语言它是为了解决手动内存管理的繁琐和低效问题。Java语言设计时将垃圾回收作为其核心特性之一以简化内存管理并提高开发效率。 Java中的垃圾回收机制主要依赖于以下几个方面 自动内存管理JVM自动追踪对象的引用情况确定哪些对象不再被使用。垃圾收集算法JVM使用不同的算法如标记-清除、复制、标记-清除-整理等来识别和回收垃圾对象。垃圾收集器JVM提供了多种垃圾收集器以适应不同的应用场景和性能需求。 Java的finalize方法类似于C中的析构函数提供了在对象被回收前执行清理操作的机会。但由于finalize的执行时机不确定且可能影响垃圾回收的性能因此通常不推荐依赖它来进行关键的资源回收。 总的来说垃圾回收是现代编程语言的一个重要特性它帮助开发者编写更安全、更高效的程序。Java作为一门高级语言通过其垃圾回收机制显著简化了内存管理的复杂性。 Java中的垃圾回收机制 自动内存管理 JVM自动追踪对象的引用情况确定哪些对象不再被使用。这也是讨论垃圾回收的前提只有知道谁是垃圾才可以进行垃圾回收吗常用的是引用计数法、可达性分析垃圾判断 引用计数法 引用计数法是一种简单直接的垃圾回收算法。在这种方法中每个对象维护一个计数器用于记录有多少个引用指向该对象 引用增加当有引用指向一个对象时对象的引用计数加一。引用消失当引用被清除时对应的对象引用计数减一。垃圾回收当对象的引用计数为零时表示没有任何引用指向该对象该对象可以被垃圾回收。 优点 垃圾对象可以很快被发现并回收。 缺点 难以处理循环引用问题即两个或多个对象相互引用但对其他对象没有引用按照引用计数法这些对象的引用计数不为零不会被回收。维护引用计数需要额外的开销尤其是在大量对象和频繁更新引用的场景下。 可达性分析 可达性分析是JVM中更常用的垃圾回收算法它基于一系列被称为GC Roots的根对象进行 GC Roots包括Java方法栈中的局部变量、静态变量、本地方法栈中的引用等。标记过程从GC Roots开始所有可达的对象都会被标记为存活可达的是存活哈。清除过程未被标记的对象被认为是垃圾可以被回收。 优点 可以处理循环引用问题因为可达性分析不依赖于引用计数只要没有GC Roots可达的路径对象就会被回收。适用于大规模的应用程序因为它可以更精确地识别存活对象。 缺点 需要暂停应用程序Stop-the-World来执行标记和清除过程尤其是在Full GC时。标记和清除过程可能需要较长时间尤其是在堆内存很大时。 STW Stop The WorldSTW是Java虚拟机JVM垃圾回收中的一个术语指的是在执行垃圾回收时JVM必须暂停应用程序的执行以便在一致的状态进行内存的回收和整理。以下是STW的一些关键点 全局一致性STW确保了在垃圾回收期间整个堆的状态是一致的避免了并发执行时对内存状态的不一致性。 减少复杂性通过暂停应用程序的执行垃圾回收器可以简化其算法因为不需要处理并发修改的问题。 性能影响STW会导致应用程序的延迟增加因为所有的应用线程都被挂起直到垃圾回收完成。 优化目标现代垃圾回收器的设计目标之一是减少STW的时间以提高应用程序的响应性和吞吐量。 类型 Minor GC通常很快对新生代进行回收STW时间较短。Major GC 或 Full GC涉及整个堆的回收STW时间较长对性能的影响也更大。 并发收集一些垃圾回收器如CMSConcurrent Mark-Sweep和G1Garbage-First通过并发标记和清除阶段减少STW时间。 低延迟收集器例如ZGC和Shenandoah它们通过并发处理大部分GC阶段极大地减少了STW事件。 调优通过调整JVM参数和选择合适的垃圾回收器可以优化STW事件减少其对应用程序性能的影响。 监控通过监控工具如JConsole或VisualVM可以观察STW事件和持续时间以评估垃圾回收对性能的影响。 应用设计应用程序设计时应考虑到STW的影响例如避免在性能敏感的路径上进行长时间的GC。 STW是垃圾回收的一个挑战现代JVM通过各种策略和算法来减少STW的影响以提供更平滑的应用程序性能。 垃圾收集算法 标记-清除Mark-Sweep算法 标记-清除算法Mark-Sweep是一种基础的垃圾回收算法如上图所示它通过以下两个主要步骤来回收内存中的垃圾对象 标记阶段算法从根集合GC Roots开始使用可达性分析法遍历所有可达对象并将这些存活对象进行标记。 清除阶段算法再次遍历内存区域这次是为了识别那些未被标记的对象即那些不再被引用的垃圾对象并将它们清理掉从而释放内存空间。 这种算法的优点在于逻辑简单易于实现但它也有明显的缺点如上图回收后JVM内存图会产生内存碎片问题由于对象是逐个被清理的这可能导致内存中出现许多小的空闲区域也就是JVM内存碎片。内存碎片过多时当程序需要分配较大的连续内存块时可能无法找到足够的空间即便总的空闲内存是足够的。这种情况可能导致提前触发新一轮的垃圾收集影响程序性能。 复制Copying算法 复制算法Copying是在标记清除算法上演化而来的用于解决标记清除算法的内存碎片问题。如上图所示它将可用内存按容量划分为大小相等的两块每次只使用其中的一块当其中一块使用完就将还存活着的对象复制到另外一块上面然后再把已使用过的内存空间一次清理掉。这样就保证了内存的连续性逻辑清晰运行高效。 优势 简单高效复制算法避免了标记-清除算法中内存碎片的问题实现简单运行高效3。高吞吐量由于只处理存活对象所以效率较高尤其适合新生代对象存活率低的情况1。内存分配快速复制算法完成后空闲内存是连续的分配内存时只需移动堆顶指针非常快速。 缺点 内存利用率降低由于需要两个内存区域实际使用的内存只有一半。对象复制成本需要复制存活对象这会带来一定的性能开销。上述缺点让人 标记-清除-整理Mark-Sweep-Compact算法 标记-清除-整理Mark-Sweep-Compact算法是一种垃圾回收算法这个算法分为三个阶段 标记Mark在这个阶段垃圾回收器遍历所有可达对象从根对象开始标记所有可达的对象。这意味着垃圾回收器会识别出所有仍然在使用中的对象以便在后续阶段不会被错误地回收。 清除Sweep一旦标记阶段完成垃圾回收器将遍历堆内存清除所有未被标记的对象。这个阶段可能会留下内存碎片因为对象是逐个被清除的而不是成块地清除。 整理Compact为了解决内存碎片问题这个阶段会将所有存活的对象向堆的一端移动使得它们紧密排列。然后回收器可以简单地清理掉边界之外的所有内存。整理阶段完成后堆内存中存活的对象是连续存放的这有助于提高内存访问的局部性从而提高性能。 优点 没有内存碎片通过整理阶段可以避免内存碎片的问题使得内存使用更加高效。适用于老年代由于老年代的对象存活率高标记-清除-整理算法可以有效地管理这些对象。 缺点 效率问题整理阶段可能需要移动大量的对象这可能会导致相对较高的开销。暂停时间标记和清除阶段可能会引起应用程序的暂停尤其是在处理大量对象时。 在实际的JVM实现中标记-清除-整理算法可能会有所变化以适应不同的垃圾回收需求和优化性能。例如某些实现可能会采用增量或并发的垃圾回收策略来减少应用程序的暂停时间。此外现代JVM通常会结合使用多种垃圾回收算法以适应不同内存区域的特点。 分代收集算法 分代收集算法Generational Collection是一个结合了多种基础垃圾回收算法的策略它根据对象的生命周期特点将堆内存划分为不同的区域并对这些区域采用最适合的垃圾回收算法。 根据对象存活周期的不同会将内存划分为几块一般是把 Java 堆分为新生代和老年代新生代又可以分为Eden区和Survivor区其中Survivor区又会分To与From区这样就可以根据各个年代的特点采用最适当的收集算法如上图所示。 在新生代中每次垃圾收集时都发现有大批对象死去只有少量存活那就选用复制算法只需要付出少量存活对象的复制成本就可以完成收集。 老年代中因为对象存活率高、没有额外空间对它进行分配担保就必须使用标记清理或者标记整理算法来进行回收。 Eden区 Eden区是新生代的一部分大多数新创建的对象首先被分配到这里。据 IBM 公司之前的研究表明有将近 98% 的对象是朝生夕死正是由于对象的朝生夕死特性Eden区经常需要进行Minor GC来回收垃圾对象。通过 Minor GC 之后Eden 区中绝大部分对象会被回收而那些无需回收的存活对象将会进到 Survivor 的 From 区如果 From 区不够则直接进入 To 区。 Survivor区 Survivor区有两个From和To它们的作用是作为Eden区和Old区之间的缓冲。通过Minor GC存活的对象从Eden区和From区复制到To区这样可以减少直接晋升到老年代的对象数量降低Major GC的频率。两个Survivor区的设计有助于避免内存碎片并确保每次GC后都有一个Survivor区是空的另一个是没有碎片的。 Survivor区的划分原因 如果只有一个Survivor区每次Minor GC后存活对象和需要清除的对象都会混在一起导致内存碎片问题。两个Survivor区可以在每次Minor GC后将存活对象复制到空的Survivor区从而保持内存的连续性。 Old区 老年代占据了Java堆的大部分空间主要用于存放长期存活的对象。由于老年代中对象的存活率高通常使用标记-清除或标记-整理算法进行垃圾回收。 常用的垃圾回收器 上面介绍的两个小节自动内存管理和垃圾收集算法都是从理论上介绍了设计思路具体的实现再落在具体的垃圾回收器上下面罗列了目前主流的垃圾回收器。 Java虚拟机JVM提供了多种垃圾回收器以适应不同的应用场景和性能要求。以下是一些常用的垃圾回收器及其特点 Serial GC单线程适合小内存和单核环境。ParNew GCSerial的多线程版本适合多核环境。Parallel Scavenge GC追求吞吐量适合后台处理。Serial Old GC老年代单线程使用标记-整理算法。Parallel Old GC老年代多线程与Parallel Scavenge配合。CMS GC老年代并发收集减少停顿时间但可能产生内存碎片。G1 GC堆分割为区域追求低延迟和高吞吐量。ZGC低延迟几乎不牺牲吞吐量适合大堆内存。Shenandoah同样以低延迟为目标由Red Hat开发。 每种垃圾回收器都有其特定的使用场景和优化目标。开发者可以根据应用程序的具体需求选择合适的垃圾回收器来优化性能。随着Java技术的发展新的垃圾回收器也在不断地被引入和优化。 小节 本章我们主要介绍了Java的垃圾机制包括垃圾回收基本概念重点介绍了垃圾回收机制中自动内存管理与垃圾收集算法。简短罗列了下常用见的垃圾回收器。下一篇我们见重点介绍各个垃圾回收器的特定、及适用的常见。  最后还是提一个小问题你们线上JVM的参数是什么使用的是什么垃圾回收器呢
http://www.tj-hxxt.cn/news/130567.html

相关文章:

  • flash怎么做网站敦化网站开发
  • 泸州网站seowordpress给幻灯片添加图片
  • 网站建设 功能需求dede网站如何做中英文版本
  • 东莞网站建设渠道长春建站费用
  • 网站后台数据宜昌最新消息今天
  • 横栏网站建设网站运营团队建设
  • 创建网站代码是什么问题icp备案网站接入信息怎么填
  • 沈阳建网站wordpress xiu5.3
  • 做网站+利润做网站需要的图片大小
  • 佛山h5建站模板网站技术架构图
  • 个人在湖北建设厅网站申请强制注销城乡建设和住房建设厅官网
  • 电商网站策划书怎么查看一个网站是哪家公司做的
  • 网站内容标签设计怎样在网上做推广
  • 建网站什么网最好企业网站新闻wp怎么做
  • 电脑网站加速器住房和城乡建设岗位证书
  • 网站开发常用字体谷歌seo新规则
  • 云速网站建设公司佛山市住房和城乡建设部网站
  • 用c 做一个小网站怎么做网站色彩搭配技巧
  • 做民宿要给网站多少合同钱怎么制作手机app及网站
  • 电商网站wordpress软文案例大全300字
  • 手机网站dedecms营销网站建设哪家快
  • 专题网站模板网站开发未来
  • 江西安福县建设局网站wordpress九宫格主题
  • 赣县网站制作wordpress水印图片插件
  • 网站基础建设英文翻译wordpress 板块
  • 在线代理网址网站优化文章
  • 简述电子商务网站建设流程seo优化招商
  • 网站产品展示单页模板做网站赚钱难
  • 好的网站怎么设计crm管理系统销售
  • 网站建设用什么系统好优秀广告设计案例作品欣赏