首页 文章 精选 留言 我的

精选列表

搜索[JDK 25],共10000篇文章
优秀的个人博客,低调大师

JDK11 | 第六篇 : Epsilon 垃圾收集器

文章首发于公众号《程序员果果》 地址 : https://mp.weixin.qq.com/s/RhGXJImhp7Xm-wDrpPomkQ 一、简介 Epsilon(A No-Op Garbage Collector)垃圾回收器控制内存分配,但是不执行任何垃圾回收工作。一旦java的堆被耗尽,jvm就直接关闭。设计的目的是提供一个完全消极的GC实现,分配有限的内存分配,最大限度降低消费内存占用量和内存吞吐时的延迟时间。一个好的实现是隔离代码变化,不影响其他GC,最小限度的改变其他的JVM代码。 二、使用场景 Performance testing,什么都不执行的GC非常适合用于差异性分析。no-op GC可以用于过滤掉GC诱发的新能损耗,比如GC线程的调度,GC屏障的消耗,GC周期的不合适触发,内存位置变化等。此外有些延迟者不是由于GC引起的,比如scheduling hiccups, compiler transition hiccups,所以去除GC引发的延迟有助于统计这些延迟。 Memory pressure testing, 在测试java代码时,确定分配内存的阈值有助于设置内存压力常量值。这时no-op就很有用,它可以简单地接受一个分配的内存分配上限,当内存超限时就失败。例如:测试需要分配小于1G的内存,就使用-Xmx1g参数来配置no-op GC,然后当内存耗尽的时候就直接crash。 VM interface testing, 以VM开发视角,有一个简单的GC实现,有助于理解VM-GC的最小接口实现。它也用于证明VM-GC接口的健全性。 Extremely short lived jobs, 一个短声明周期的工作可能会依赖快速退出来释放资源,这个时候接收GC周期来清理heap其实是在浪费时间,因为heap会在退出时清理。并且GC周期可能会占用一会时间,因为它依赖heap上的数据量。 Last-drop latency improvements, 对那些极端延迟敏感的应用,开发者十分清楚内存占用,或者是几乎没有垃圾回收的应用,此时耗时较长的GC周期将会是一件坏事。 Last-drop throughput improvements, 即便对那些无需内存分配的工作,选择一个GC意味着选择了一系列的GC屏障,所有的OpenJDK GC都是分代的,所以他们至少会有一个写屏障。避免这些屏障可以带来一点点的吞吐量提升。 三、案例 使用G1垃圾收集器 代码: public class TestEpsilon { public static void main(String[] args) { System.out.println("程序开始"); boolean flag = true; List<Garbage> list = new ArrayList<>(); long count = 0; while (flag) { list.add(new Garbage(list.size() + 1)); if (list.size() == 1000000 && count == 0) { list.clear(); count++; } } System.out.println("程序结束"); } } class Garbage { private int number; public Garbage(int number) { this.number = number; } /** * GC在清除对象时,会调用finalize()方法 */ @Override public void finalize() { System.out.println(this + " : " + number + " is dying"); } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } } 启动参数: -Xms100m -Xmx100m 运行程序后,结果如下: 程序开始 ... com.gf.demo8.Garbage@15ddf76b : 305097 is dying com.gf.demo8.Garbage@35e52705 : 305224 is dying com.gf.demo8.Garbage@32c14bc1 : 305362 is dying com.gf.demo8.Garbage@7521660a : 305705 is dying com.gf.demo8.Garbage@f3da16a : 305948 is dying com.gf.demo8.Garbage@13fc7287 : 306089 is dying at java.base/java.lang.ref.Finalizer.register(Finalizer.java:66) at java.base/java.lang.Object.<init>(Object.java:50) at com.gf.demo8.Garbage.<init>(TestEpsilon.java:28) at com.gf.demo8.TestEpsilon.main(TestEpsilon.java:14) ... 会发现G1一直回收对象,直到内存不够用。 使用Epsilon垃圾收集器 启动参数: UnlockExperimentalVMOptions:解锁隐藏的虚拟机参数。 -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms100m -Xmx100m 运行程序后,结果如下: 程序开始 Terminating due to java.lang.OutOfMemoryError: Java heap space 会发现很快就内存溢出了,因为Epsilon不会去回收对象。

优秀的个人博客,低调大师

MoonBit × CCF 开源创新大赛 倒计时 25 天!快来提交你的作品

01 赛事简介 MoonBit ×CCF开源创新大赛以 MoonBit编程语言及其工具链为基础,面向全体开发者(不限学生或社会人士),鼓励参赛者利用AI工具完成开源生态库、开发工具和示例工程的设计、移植、实现与完善。 你可以选择原创实现,也可以从Rust、Go、TypeScript、Python、OCaml、Scala、Java 等成熟语言生态中选择合适的开源库进行MoonBit 移植。AI工具可以帮你生成代码、补测试、写文档、整理接口,但最终评审看的,是你能否把项目边界讲清楚,把核心功能做扎实,把开源合规和工程质量把住。 02激励机制 参赛者通过官方表单提交参赛信息、在线仓库链接和一页PDF项目申报书。通过申报审核可获得150元启动支持。 项目完成后按官方通知准备验收材料。通过验收可获得350元完成支持,启动支持与完成支持合计500元/项目。 此外,已通过审核的参赛者可推荐你身边的同学/同事/朋友一起参赛,报名时填写推荐人手机号,审核通过后可获得50元/人转推荐奖励。 目前 MoonBit 开源生态项目贡献赛报名已突破 200 人,项目提交超过 100 份,赛事激励金正在陆续发放,已经有相当多的同学已收到了他们的第一批项目支持金。 赛事报名延期至7月12日 24点,我们欢迎所有对MoonBit、AI编程、开源生态、基础软件或软件工程实践感兴趣的开发者,用MoonBit,一起建设国产开源生态! 关于 MoonBit : MoonBit (https://www.moonbitlang.cn/)国内首个工业级编程语言及其配套工具链, 由粤港澳大湾区数字经济研究院(简称“IDEA 研究院”)基础软件中心打造的AI原生的编程语言以及开发者平台。通过创新框架在程序语言界形成后发优势,在编译速度、运行速度、体积大小上已成功领先传统语言。 官方平台账号,欢迎关注 官网|moonbitlang.cn 知乎|@张宏波 / @MoonBit 小红书|MoonBit月兔 Twitter|@Moonbitlang Bilibili|MoonBit月兔 抖音|MoonBit月兔 MoonBit用户交流群|添加小助手moonbit_helper ➕*关注*分享 *在看一键三连 ~ ⬇点击阅读原文,进入赛事官网

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册