1.学习编程的猿入源码费用是多少?
2.OpenJDK17-JVM 源码阅读 - ZGC - 并发标记 | 京东物流技术团队
3.ç©¿è¶ç±»ççµå½±ï¼
4.如何评价儒猿《从零开始带你成为消息中间件实战高手》专栏?
5.把Mybatis Generator生成的代码加上想要的注释
学习编程的费用是多少?
核桃编程的年学费根据不同的课程和教学模式有所差异。其线下单次课程的此源价格在至元之间。对于年费课程,码猿核桃编程的分享标准收费为元,但参与特定活动或团购时,猿入源码家长可以选择支付元。此源rade源码此外,码猿一年学费通常在元左右,分享这一费用包括了考级费用。猿入源码对于少儿编程课程,此源一年的码猿学费定为元,相较于其他平台如猿编程,分享价格略高。猿入源码这一费用同样涵盖了考级费用,此源总额约为元。码猿需要注意的是,线上和线下课程的价格可能存在差异。
核桃编程是一家成立于年8月9日的平台,旨在为青少年提供开源编程的科技教育。该平台通过自主研发的开源编程工具和一体化SaaS产品服务,构建青少年编程创新社区和开源生态系统。人物投票源码核桃编程的目的是教授青少年编程技能,让他们体验科技乐趣,并激发他们的创新潜能。
年3月日,核桃编程完成了C轮融资,由KKR、元璟资本和高瓴创投领投,源码资本和华兴新经济基金等机构跟投。融资将用于进一步开发开源编程工具,并专注于为青少年提供编程科技创新平台,以培养未来的科技创新人才。
核桃编程推出了“核众计划”,通过产品方案、服务系统和赛事运营三个方面,协助教育机构进行转型和赋能。该平台能够帮助K教育机构减少在编程工具和平台研发上的投入,并提供趣味性、标准化和体系化的教学内容。因其互助合作和公益活动,核桃编程获得了中国民办教育协会和北京民办教育协会颁发的在线伪原创源码“同业互助,公益先锋”荣誉称号和证书。
此外,核桃编程与美丽中国合作,向偏远山区的学校捐赠编程服务产品,并提供相应平台和技术支持,确保偏远地区的孩子也能享受到优质的编程教育资源。通过“核梦工程”,核桃编程已经覆盖了广东、福建、云南三省的多所偏远山区学校,并计划未来扩展到更多的美丽中国项目学校。
OpenJDK-JVM 源码阅读 - ZGC - 并发标记 | 京东物流技术团队
ZGC简介:
ZGC是Java垃圾回收器的前沿技术,支持低延迟、大容量堆、染色指针、读屏障等特性,自JDK起作为试验特性,JDK起支持Windows,JDK正式投入生产使用。在JDK中已实现分代收集,翻翻看 源码预计不久将发布,性能将更优秀。
ZGC特征:
1. 低延迟
2. 大容量堆
3. 染色指针
4. 读屏障
并发标记过程:
ZGC并发标记主要分为三个阶段:初始标记、并发标记/重映射、重分配。本篇主要分析并发标记/重映射部分源代码。
入口与并发标记:
整个ZGC源码入口是ZDriver::gc函数,其中concurrent()是一个宏定义。并发标记函数是concurrent_mark。
并发标记流程:
从ZHeap::heap()进入mark函数,使用任务框架执行任务逻辑在ZMarkTask里,具体执行函数是work。工作逻辑循环从标记条带中取出数据,直到取完或时间到。此循环即为ZGC三色标记主循环。之后进入drain函数,从栈中取出指针进行标记,直到栈排空。标记过程包括从栈取数据,标记和递归标记。企商网源码
标记与迭代:
标记过程涉及对象迭代遍历。标记流程中,ZGC通过map存储对象地址的finalizable和inc_live信息。map大小约为堆中对象对齐大小的二分之一。接着通过oop_iterate函数对对象中的指针进行迭代,使用ZMarkBarrierOopClosure作为读屏障,实现了指针自愈和防止漏标。
读屏障细节:
ZMarkBarrierOopClosure函数在标记非静态成员变量的指针时触发读屏障。慢路径处理和指针自愈是核心逻辑,慢路径标记指针,快速路径通过cas操作修复坏指针,并重新标记。
重映射过程:
读屏障触发标记后,对象被推入栈中,下次标记循环时取出。ZGC并发标记流程至此结束。
问题回顾:
本文解答了ZGC如何标记指针、三色标记过程、如何防止漏标、指针自愈和并发重映射过程的问题。
扩展思考:
ZGC在指针上标记,当回收某个region时,如何得知对象是否存活?答案需要结合标记阶段和重分配阶段的代码。
结束语:
本文深入分析了ZGC并发标记的源码细节,对您有启发或帮助的话,请多多点赞支持。作者:京东物流 刘家存,来源:京东云开发者社区 自猿其说 Tech。转载请注明来源。
ç©¿è¶ç±»ççµå½±ï¼
æãéè¿å²ãããåç®çå°ãããææ¥è¾¹ç¼ãããæºä»£ç ãããæ å§ä¹äººãçç1ããåç®çå°ã
ãåç®çå°ãæ¯è¿å å°Â·æ¯æ´¾çãå½¼å¾Â·æ¯æ´¾çå å¼èè¢ç¼å§å¹¶æ§å¯¼çä¸é¨ç§å¹»ææçï¼ç±ä¼æ¡Â·éå ãèæ·æ¯åªå ã诺äºÂ·æ³°åãå¼é·å¨ ·æ¯å¡ç¦ãä¼èæ¯Â·è©¹æ£®ä¸»æ¼ãå½±çæ¹ç¼èªç½ä¼¯ç¹Â·A·海å è±å å°è¯´ãä½ ä»¬è¿äºè¿éå°¸ãï¼è®²è¿°ä¸ä¸ªæ¶é´ç¹å·¥ç©¿æ¢æ¶ç©ºæåé»æ¢ç¯ç½ªçç¥ç§ç»ç»æåï¼ä»ç©·å°½ä¸ç追踪ä¸åè¿ç¯çç¸ç¯ï¼ä½æç»ç´é¢å¯¹ææ¶ï¼çç¸å´è®©ä»ç ç®ç»èã
2ããææ¥è¾¹ç¼ã
ãææ¥è¾¹ç¼ãï¼Edge of Tomorrowï¼æ¯éæ ¼Â·éæ¼æ§å¯¼çç§å¹»å¨ä½çµå½±ï¼ç±æ±¤å§Â·å é²æ¯åè¾ç±³è·å¸æç¹ç主æ¼ï¼æ¹ç¼èªæ¨±åæ´å¹´æèæ¥æ¬è½»å°è¯´ãAll You Need Is Killãã该ç以ç¥ç§å¤æçç©è¢å»å°ç为èæ¯ï¼å°æ ¡æ¯å°Â·å¯å¥é¦æ¬¡åºæå°±âæææ²åºâæ¨ççºç²ï¼ä½ä»å´ç±äºæç§ä¸æåå éè·æ°çï¼å¨ä¸æ¬¡ä¸æ¬¡ççæ»å¾ªç¯ä¸ï¼æ¯å°è¶æ¥è¶æäºå¶ææ¹æ³ï¼æç»èµ°åèå©ã
3ããæºä»£ç ã
ãæºä»£ç ãæ¯ç±éè¯Â·ç¼æ¯æ§å¯¼ï¼æ°å ·å伦åå°ãç»´æ·æ³ç±³å ãç±³æå°Â·è«å¨æ±ç人èè¢åºæ¼ãå½±çäºå¹´4æ1æ¥å¨ç¾å½ä¸æ ãå½±ç讲述äºä¸ä½å¨é¿å¯æ±æ§è¡ä»»å¡çç¾å½ç©ºåé£è¡åæ¯å°ç¹Â·å²èææ¯ï¼éæ¥æ¶åç°èªå·±æ£å¤å¨ä¸è¾åå¾èå å¥çç«è½¦ä¸ï¼å¹¶å°±æ¤ç»åçä¸ç³»åæå¿å¨éçäºä»¶ã
4ããéè¿å²ã
ãéè¿å²ãæ¯ä¸é¨ä¸é©åä½åºåçå¥å¹»åå§çµå½±ãç±éæ£éæ§å¯¼ï¼æ¨åå§ãéæéãå½äºè¾ã鹿æä¸»æ¼ ãå½±ç讲述äºä¸ä½ä¸æ¬è太太ä¸å¯æè®®å身为å¦é¾å¥³ååï¼ä»¥æ°èº«ä»½åå°æ¥å¸¸çæ´»ï¼å¼åçä¸ç³»åå¼ç¬çéçå¥å¹»æ äºã
5ããæ å§ä¹äººã
ãæ å§ä¹äººãæ¯ç±é å ·è·å¤æ¢ å°æ§å¯¼çç§å¹»ç±æ çï¼ æ°ç德·è±æï¼è¨æ·波èï¼é»å®Â·å é²æ ¼ç主æ¼ãå½±ç讲述äºç±æ°çå¾·æ®æ¼çå²ç·ä¸»äººå ¬å°¼è«Â·è¯ºä¼¯è¿ªæç»åçä¸åºç©¿è¶ç离ç°å®å ³ç³»è迷失çç±æ æ äºï¼å¨è®°å¿é¿æ²³ä¸å¯»æ¾ä¸ä¸ªç·äººç人çä¹è°ã
如何评价儒猿《从零开始带你成为消息中间件实战高手》专栏?
面对互联网行业的快速变迁,RocketMQ作为消息中间件的佼佼者,其在各大公司的广泛应用无疑为开发者提供了更多实践机会。然而,对于个人而言,实际接触机会可能并不频繁。专栏作者通过精心设计的教程,以图表丰富、步骤详尽的方式,引导初学者逐步掌握RocketMQ的使用方法与原理。这种方式打破了技术学习中常见的信息壁垒,使晦涩难懂的专业术语变得易于理解。专栏不仅模拟了实际工作场景,将技术应用与具体问题解决相结合,使学习者能够在真实的项目实践中提升技能。随着课程的深入,学习内容逐渐深化,涵盖了更为复杂的机制与原理,为追求更深层次技术理解的读者打下了坚实的基础。通过几个月的系统学习,学习者不仅掌握了RocketMQ的基本原理,还对相关网络知识有了更深入的理解。分享的笔记是学习旅程的宝贵财富,能够帮助更多初学者加速成长。对于那些对RocketMQ源码感兴趣但尚未达到深度研究阶段的学习者来说,此专栏无疑是一个极佳的入门路径。通过实践与理论的结合,学习者能够自信地应对工作中遇到的挑战,实现技术与实践的无缝对接。
把Mybatis Generator生成的代码加上想要的注释
在日常开发工作中,Mybatis Generator常用于根据表结构生成实体类与Mapper文件。然而,其默认生成的代码通常缺少详细的注释,这会增加后续维护和理解代码的难度。因此,通常会配置Mybatis Generator不自动生成注释,但这样又引入了在生成代码后手动添加注释的繁琐工作。 为解决此问题,可以通过重写Mybatis Generator的CommentGenerator接口,实现自定义注释生成,减少重复劳动。以下步骤展示了如何实现这一目标。使用Java方式执行Mybatis Generator
在IntelliJ IDEA中,首先创建一个Maven项目,并在pom.xml文件中引入相关jar包。 接下来,在项目中创建generatorConfig.xml文件,通常将其放置在src/main/resources目录下。通过运行包含generatorConfig.xml的main方法,验证默认生成注释的情况,并确认其通常设置为不生成注释。 实现CommentGenerator接口,重写相关方法以自定义注释内容。修改generatorConfig.xml文件,将commentGenerator配置项替换为自定义的实现类。 运行生成器,检查生成的注释是否符合预期。使用Maven方式执行Mybatis Generator 在Pom.xml文件中增加Maven插件配置,确保在生成器依赖中引入实现CommentGenerator接口的jar包,并确保该jar包已安装到本地仓库。这样,执行Maven命令时,生成器将能够正确识别并使用自定义注释生成类。源码分析
执行Mybatis Generator的main方法,其主要功能包括解析配置文件和调用生成java文件与Mapper文件的方法。解析xml配置文件时,通过Document形式读取并解析标签属性,将解析结果存储在Configuration实例中。在生成文件时,根据Context的type属性反射创建实现CommentGenerator接口的类实例,并调用其方法生成注释。 生成实体类文件注释时,会调用addModelClassComment方法;生成字段注释时,调用addFieldComment方法;生成Get方法注释时,调用addGetterComment方法。这些方法的执行实现了自定义注释的生成。总结
通过实现自定义的CommentGenerator接口,可以轻松地将Mybatis Generator生成的代码添加上所需注释,大大减轻了手动添加注释的负担。使用Maven方式执行生成器时,需要确保引入插件依赖,并确保自定义jar包已正确安装。这种方法不仅适用于Mybatis Generator,也适用于其他使用生成器技术的开发场景。 本文由京东物流 王建乐撰写,如需转载,请注明来源:京东云开发者社区 自猿其说 Tech。