如何注册一家网站建设公司长春免费网站制作

张小明 2025/12/27 9:51:36
如何注册一家网站建设公司,长春免费网站制作,网站建设施工图片,常熟网站建设垃圾回收的核心问题如下 1、哪些内存需要回收#xff1f;2、什么时候回收#xff1f;3、如何回收#xff1f; 一、如何知道哪些内存需要回收#xff1f; 引用计数算法 #xff08;了解即可#xff09; 在对象中添加一个引用计数器#xff0c;引用一次就1#xff0c;引用…垃圾回收的核心问题如下1、哪些内存需要回收2、什么时候回收3、如何回收一、如何知道哪些内存需要回收引用计数算法 了解即可在对象中添加一个引用计数器引用一次就1引用失效就-1优势劣势优势简单高效劣势需要占用一些额外的空间循环引用问题难以解决。可达性分析算法 目前市面上垃圾收集器都是用的这个通过GC Roots的引用链判断对象是否还在使用引用链从GC Roots的根节点集开始根据引用关系向下搜索所走过的路径。优势适用复杂场景无循环依赖的问题劣势遍历成本高需要STW可达性分析算法虽有 STW 开销但能解决循环引用、适配多引用类型成为 JVM GC 的标准选择现代 GC 的优化核心也围绕 “减少可达性分析的 STW 时间” 展开如下图object5、6、7虽互有关联但它们到GC Roots是不可达的所以是可回收的对象。解决了什么问题复杂场景中解决循环依赖问题准确判定对象是否仍存活的问题哪些对象是GC Root对象1、正在使用中的对象1.1、线程正在使用的对象即虚拟机栈栈帧中的本地变量表所引用的对象。1.2、JNI正在使用的对象即在本地方法栈中JNI即通常所说的Native方法引用的对象。1.3、锁正在使用的对象所有被同步锁synchronized关键字持有的对象。2、类引用的对象2.1、类的静态变量对象即方法区中类静态属性引用的对象。2.2、类的常量对象即方法区中常量引用的对象譬如字符串常量池String Table里的引用。3、常驻对象3.1、常驻对象如系统类加载器、基本类型对应的Class对象、一些常驻的异常对象比如NullPointExcepiton、OutOfMemoryError等。3.2、jvm管理对象反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。可达对象一定不回收吗这里就要聊引用了为了适用复杂场景java引入了强、软、弱、虚四种引用级别。以解决-》某些可留可不留的对象在内存紧张回收或宽松时不回收的存留问题。不同引用在垃圾回收时的行为强引用Strongly Re-ference不回收类似“Object objnew Object()”这种引用关系。软引用Soft Reference如果第一次回收后还没有足够空间则第二次时回收。SoftReference弱引用Weak ReferenceGC一定回收WeakReference类虚引用Phantom Reference4种无法通过该引用找到对象该引用的作用是回收时有系统通知。PhantomReference类不可达的对象一定回收吗扩展知识不建议生产中使用不一定的为啥呢下述是回收的流程1、在可达性分析后不可达的对象会被第一次标记然后初筛是否执行过finalize()方法执行过finalize()则回收没执行过finalize()则放入一个名为F-Queue的队列中然后启动一条低优先级的线程去执行其中对象的finalize()方法此时如在方法中拯救这个对象这个对象就不会被回收F-Queue的队列中对象的finalize()不保证一定执行避免由某个对象的finalize()方法执行缓慢或者更极端地发生了死循环导致的F-Queue队列中其他对象永久等待甚至整个内存回收子系统崩溃方法区回收在大量使用反射、动态代理、CGLib等字节码框架动态生成JSP以及OSGi这类频繁自定义类加载器的场景中通常都需要Java虚拟机具备类型卸载的能力以保证不会对方法区造成过大的内存压力。方法会回收触发核心触发条件「类的所有实例被回收 加载该类的类加载器被回收 类对象无引用」Full GC时回收除 ZGC/Shenandoah 外均需触发 Full GC 才能回收方法区Full GC导致的长时间STW是调优的核心痛点元空间如何减少STW元空间在堆中可调高full GC触发条件-XX:MetaspaceSize二、垃圾回收算法何时回收如何回收垃圾回收算法的核心问题-》平衡如何快速回收回收后如何高效分配内存分代收集理论分代收集理论是后续“标记-清除” “标记-复制” “标记-整理”算法的基础。分代收集理论建立在三条分代假说之上1、弱分代假说绝大多数对象都是朝生夕灭的2、强分代假说熬过越多次垃圾收集过程的对象就越难以消亡3、跨代引用假说跨代引用相对于同代引用来说仅占极少数分代收集理论解决了什么问题如何在垃圾回收时使垃圾回收更高效朝生夕灭的对象频繁扫描难以消亡的不频繁扫描扫描时区域足够小怎么解决的根据1、2条原则划分区域新生代老年代对象出生在新生代根据假说1频繁垃圾回收多次Minor GC仍存活则进入老年代根据假说2不频繁垃圾回收。既然对象划分了区域那肯定会有跨带引用的问题如果年轻代回收时因为跨代引用所以可达性分析时扫描整个年老代显然时不划算的。所以根据假说3在新生代中维护“记忆集”Minor GC时只扫描记忆集中包含跨代引用的小块内存。记忆集把老年代划分成若干小块标识出老年代的哪一块内存会存在跨代引用标记-清除算法老年代的 “并发低延迟回收”主打快标记-清除算法是后续的收集算法的基础他有“标记”和“清除”两个阶段标记阶段判断哪些对象需要回收回收阶段回收这些对象。该算法存在的问题1、执行效率不稳定对象数量大时回收效率低2、回收后内存碎片化回收后会产生大量碎片化内存可能导致后续大对象找不到足够的连续内存进而导致不得不再次GC。仅 CMS GC 的老年代回收核心用标记 - 清除触发 “内存碎片过多” 时会降级为标记 - 整理CMS Full GC或触发 Full GC。什么时候触发GCMajor GC核心条件老年代内存使用率达到预设阈值如 CMS GC 的-XX:CMSInitiatingOccupancyFraction默认 92%触发频率低秒 / 分钟级仅当老年代内存接近阈值时触发。标记-复制算法新生代的 “高频轻量回收”也叫复制算法。基于“半区复制”算法。行为 将内存划分为两块每次只使用其中一块当快使用完时就将标记存活对象复制到另一块然后整个回收这一块。优势分配对象时快速高效只需顺序移动磁头劣势可用内存缩小到了原来的一半。空间浪费多Appel式回收一般用的都是这个解决空间浪费问题基于标记-复制算法优势是对内存的利用率更高了且保留了标记-复制算法的高效的对象分配行为。实现基于新生代中98%的对象熬不过第一次收集的特点将新生代划分为Eden : from SurvivorS0 : to Survivor(S1) 8∶1:1默认可调整什么时候触发GCMinor GC核心条件Eden区内存被占满新对象无法分配内存最主要触发频率极高毫秒 / 秒级因为新生代对象 “朝生夕死”Eden 区会快速被占满。Appel式回收的行为1、分配对象1.1、新创建的对象分配到Eden区大对象除外1.2、Eden区满时触发Minor GC。2、执行Minor GC2.1、标记Eden S0中存活对象可达性分析2.2、存活对象复制到S1中避免碎片2.3、清空 Eden S02.4、角色互换S0 和 S1 的标识交换原 S1 变为新的 S0原 S0 变为新的 S1下一次 GC 时新的 S1 作为空闲目标区。3、对象晋升老年代3.1、GC年龄到了即对象在Survivor区经历15次默认-XX:MaxTenuringThreshold15Minor GC仍存活3.2、S1空间不足复制到 S1 的对象总大小超过 S1 容量部分对象直接晋升老年代3.4、大对象超过阈值的对象-XX:PretenureSizeThreshold直接分配到老年代。标记-整理算法老年代的 “全量/碎片修复回收”解决内存碎片问题老年没有额外空间进行担保所以没办法使用Appel回收。又不想浪费50%空间所以 标记-复制 算法也pass。最终针对老年代对象的特点 标记-整理算法 应运而生。行为标记过后让所有存活的对象都向内存空间一端移动然后直接清理掉边界以外的内存标记-整理算法的优劣势优势整理操作可以拥有连续的磁盘空间进而使用指针碰撞的方式分配内存带来更大的吞吐量劣势基于老年代对象多数继续存活的特点整理时移动对象需要STW(Stop The World)这是一种极为负重的操作势必带来更大的延迟.总结关注吞吐量就用 标记-整理 算法例如基于标记-整理算法的Parallel Scavenge收集器关注延迟就用标记-清除算法例如基于标记-清除算法的CMS收集器什么时候触发GCMajor GC核心条件1、老年代内存满或 Minor GC 后晋升的对象无法在老年代分配连续空间碎片导致2、CMS GC 标记 - 清除后碎片过多触发 “CMS Full GC”3、手动调用System.gc()JVM 可能触发标记 - 整理4、G1/ZGC 回收老年代 Region 时需压缩内存5、元空间不足触发 Full GC 时老年代同步执行标记 - 整理触发频率极低分钟 / 小时级仅当标记 - 清除无法解决问题时触发垃圾回收算法实现细节根节点枚举Root Enumeration核心作用可达性分析的起点快速找到所有GC Roots。核心行为先STW类似生成快照保障不变化然后获取GC Roots 引用关系HotSpot优化将GC Roots存储在OopMap中枚举时直接遍历OopMap无需扫描整个栈/方法区大幅缩短枚举时间OopMap 在 类加载/即时编译时生成记录栈帧/寄存器中引用对象的位置局限性如果GC Roots跨线程栈、方法区单纯STW无法保证各线程不会改变引用关系所以枚举时就需STW安全点安全区域保证枚举时引用关系稳定。安全点Safepoint核心作用GC时保障运行中的线程暂停或恢复时处于统一节点 (此时对象引用关系不会变化避免可达性分析出错)核心行为安全点的选择仅在 “指令序列的特定位置”设置避免过于密集导致性能损耗如方法返回、循环结束、异常抛出、调用方法后线程暂停机制主动式暂停JVM 触发 GC 时设置 “安全点标志”用户线程执行到安全点时检查标志若为 GC 状态则主动暂停被动式暂停少数通过信号量强制线程停到最近的安全点。局限性如果线程处于休眠/阻塞状态如 sleep、wait就会无法走到安全点所以需安全区域进行补充。安全区域Safe Region核心作用把非运行(如sleep 、wait、park)的线程限制住避免这些线程在GC时恢复运行进而修改引用关系。核心行为GC忽略处理进入安全区域的线程安全区域内的线程在GC结束前不会恢复运行记忆集Remembered Set与卡表Card Table记忆集抽象概念记录 “从非收集区如老年代指向收集区如新生代” 的引用本质是 “指向指针的指针集合”卡表记忆集的具体实现将老年代内存划分为大小固定的 “卡页”默认 512 字节卡表是一个字节数组每个元素对应一个卡页值为 0干净或 1脏核心作用解决跨代引用问题Minor GC时仅扫描有跨代引用的老年代区域避免扫描整个老年代。核心行为标记当老年代对象引用新生代对象时对应的卡页标记为 “脏”1Minor GC时行为仅扫描卡表中 “脏” 的卡页找到跨代引用作为 GC Roots 的补充无需遍历整个老年代。写屏障Write Barrier核心作用拦截“对象引用更新”操作维护卡表的“脏标记”同时支持并发可达性分析的“增量更新/原始快照”。核心行为卡表写最常用前置写屏障更新引用前标记对应卡页为脏后置写屏障更新引用后标记对应卡页为脏HotSpot 采用示例当执行obj.ref newObj老年代 obj 引用新生代 newObj写屏障会触发将 obj 所在卡页标记为脏并发GC增量更新Incremental Update保证并发GC时新增的引用能被扫描到原始快照SATB, Snapshot At The Beginning保证并发GC时删除的引用仍能被扫描到避免漏判存活对象。代价每次引用更新都要执行写屏障指令带来微小的 CPU 开销但远低于全堆扫描的成本。并发的可达性分析Concurrent Reachability Analysis核心作用将可达性分析的大部分工作放到 “用户线程运行时” 执行仅在初始标记、重新标记阶段短暂 STW大幅减少 STW 时间如 CMS/G1/ZGC 的核心优化。核心行为 分阶段执行初始标记STW枚举 GC Roots标记直接关联的对象耗时极短并发标记无 STW从初始标记的对象出发遍历整个引用链标记存活对象此时用户线程仍在运行引用关系可能变化重新标记短 STW修正并发标记期间因用户线程操作导致的标记错误依赖写屏障记录的引用变化关键依赖写屏障记录并发标记期间的引用更新安全点安全区域保证重新标记时线程暂停卡表减少跨代引用的扫描范围。核心协作流程以 G1 GC的Minor GC为例1、触发 GC线程暂停准备1.1、JVM 检测到 Eden 区满触发 Minor GC1.2、JVM 设置 “安全点标志”通知所有运行中的用户线程执行到最近的安全点时暂停1.3、对于处于休眠 / 阻塞的线程因已进入安全区域无需主动暂停JVM 标记这些线程为 “无需处理”1.4、所有用户线程停在安全点 / 安全区域后进入短暂 STW。2、根节点枚举STW2.1、JVM 遍历「OopMap」快速枚举核心 GC Roots虚拟机栈、静态变量、JNI 引用2.2、同时扫描卡表中标记为 “脏” 的老年代卡页提取其中的跨代引用老年代→新生代作为 GC Roots 的补充2.3、仅枚举 GC Roots 和脏卡页的跨代引用无需扫描整个老年代卡表的核心价值。3、并发可达性分析部分收集器如 G1/ZGC 支持3.1、若为并发 GC如 G1 的混合收集初始标记枚举 GC Roots后释放 STW进入并发标记阶段3.2、用户线程恢复运行JVM 同时遍历引用链标记存活对象3.3、写屏障拦截所有引用更新操作3.3.1、若为跨代引用老年代→新生代自动标记对应卡页为 “脏”维护卡表3.3.2、若为普通引用更新记录到 “修改引用日志”供重新标记阶段修正。4、重新标记短 STW4.1、JVM 再次触发安全点暂停所有用户线程安全区域线程仍无需处理4.2、基于写屏障记录的 “修改引用日志”修正并发标记期间的标记错误如新增引用未标记、删除引用误标记4.3、再次检查卡表的脏页补充跨代引用的标记结果。5、完成标记执行垃圾回收5.1、可达性分析完成确定存活对象5.2、执行复制算法将 EdenFrom Survivor 的存活对象复制到 To Survivor晋升老年代的对象直接复制到老年代5.3、清空 Eden 和 From SurvivorS0/S1 角色互换5.4、JVM 清除安全点标志唤醒所有用户线程安全区域的线程检查 GC 完成后也恢复运行5.5、写屏障继续工作监控后续的引用更新为下一次 GC 维护卡表。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

有没有那个的网站网站开发的发展趋势

《精通 Python 设计模式:从入门理解到实战落地》“设计模式不是银弹,但它是你代码世界的地图。”——写给每一位渴望写出优雅、可维护代码的 Python 开发者一、引言:为什么 Python 程序员也需要设计模式? 在 Python 这样一门灵活、…

张小明 2025/12/25 17:55:44 网站建设

网站开发接口文档模板在网站的标题上怎么做图标

还在为卸载微软工具后留下的各种残留文件烦恼吗?Windows Installer Clean Up 正是您需要的专业清理工具,能够彻底解决卸载不彻底的问题,让您的系统保持整洁高效。 【免费下载链接】WindowsInstallerCleanUp工具下载 本仓库提供了一个名为“Wi…

张小明 2025/12/25 17:55:46 网站建设

网站目录层级建设深圳市宝安区住房和建设局网站

在 Ubuntu 系统中畅享游戏与多媒体乐趣 在 Ubuntu 系统中,我们可以尽情享受游戏和多媒体带来的乐趣。下面将为大家详细介绍在 Ubuntu 系统中玩游戏和使用多媒体的相关内容。 游戏安装与游玩 Windows 游戏安装 :若要安装 Windows 游戏,可使用“浏览”按钮在游戏光盘中找到…

张小明 2025/12/25 18:05:11 网站建设

seo优化网站优化如何在自己建设的网站上发表文章

在Visual Studio Code中高效开发R语言:vscode-R插件深度解析 【免费下载链接】vscode-R R Extension for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-R 想要在现代化的代码编辑器中体验R语言开发的便捷与高效吗?vsc…

张小明 2025/12/25 17:55:49 网站建设

it外包运维服务网络营销seo招聘

GitToolBox插件分支计算异常的终极修复指南 【免费下载链接】GitToolBox GitToolBox IntelliJ plugin 项目地址: https://gitcode.com/gh_mirrors/gi/GitToolBox GitToolBox插件作为IntelliJ平台上的强大Git增强工具,为开发者提供了丰富的分支管理功能。然而…

张小明 2025/12/25 17:55:50 网站建设

正定网站建设六安网站建设 220

你的浏览器书签是否已沦为"数字垃圾场"? 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 想象一下这个场景:你在紧急…

张小明 2025/12/25 17:55:51 网站建设