![](https://img-blog.csdnimg.cn/direct/e79be622edc74c10b400e6f9b2ee0ae5.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JDK(Java Development Kit)
文章平均质量分 79
以问题为引,以方法论为纲,主要围绕JDK发展历史、JVM、JIT、GC、新特性等,逐步分析、实践、验证。
剑海风云
这个作者很懒,什么都没留下…
展开
-
9个最适合使用的Java分析器
Java分析器工具可以明显的提高问题定位、分析、处理的效率,下面会给大家简单的介绍几款日常工作过程中使用到的Java分析器。原创 2024-07-14 13:40:26 · 729 阅读 · 0 评论 -
如何选择正确的 JDK 版本?
保持 JDK 最新不仅重要,而且是明智之举。通过保持最新,您可以从最新的安全性和性能增强中受益。这意味着即使您的代码保持不变,您的用户的安全性和他们对应用程序的体验也会随着时间的推移而改善。因此,我们强烈建议所有 Java 用户继续使用积极支持的版本,并立即应用关键补丁更新安全补丁。保持最新有两种途径:您可以应用同一 Java 版本的更新(更新),也可以采用较新的 Java 版本(升级)。这篇博文将提供给您一些关于思考何时更新和何时升级的建议。在深入探讨之前,有必要澄清我们将在本文中使用的一些术语。原创 2024-07-14 12:41:57 · 885 阅读 · 0 评论 -
GraalVM简介及使用
在本文中,我们将回顾 GraalVM 是什么、它是如何工作的,以及即时 (JIT) 编译和提前 (AOT) 编译之间的区别?GraalVM 是一种高性能运行时,为用 Java 和其他语言编写的应用程序提供了显着的优势。它由 Oracle 开发,通过利用高级优化和独特的架构,可以更快、更高效地运行应用程序。原创 2024-07-07 13:42:25 · 795 阅读 · 0 评论 -
在Spring Boot项目中使用Leyden
Spring Boot 服务的 RAM 消耗减少多达 30% ,为研究Spring Boot而量身定制的 Alpaquita 容器。Buidpacks也可用!重要提示:Project Leyden EA 版本基于实验代码,不适用于生产用途。此外,EA 版本中的某些功能可能会更改或删除,工作流程也可能会更改。原创 2024-07-06 21:12:59 · 643 阅读 · 0 评论 -
JVM常用概念之安全点
那么 JVM 如何让所有线程进入安全点状态?问题在于将线程暂停在已知状态,而不仅仅是中断它。为了实现此目标,如果观察到“安全点标志”,JVM 会让 Java 线程在方便的位置自行暂停。原创 2024-06-25 11:17:19 · 1044 阅读 · 0 评论 -
JDK 23:Loom改进版发布
Project Loom 发布了新的抢先体验版本(23-loom+4-102 - 2024/5/31)。改进了对象监视器实现,可以防止虚拟线程在预知的3种情况下固定其载体线程原创 2024-06-25 10:37:21 · 427 阅读 · 0 评论 -
JDK 24:Leyden
Project Leyden 发布了其首个早期版本(24-leyden+2-8 2024/6/20)。初始版本专注于缩短 Java 应用程序的启动时间。原创 2024-06-25 10:29:16 · 189 阅读 · 0 评论 -
通过自定义分配器解决 ZGC中的碎片问题
ZGC 和其他垃圾收集器通常使用碰撞指针分配,这对于顺序分配很有效,但随着时间的推移会导致碎片化。当产生无法轻松重用的内存间隙时,就会发生碎片化,这需要昂贵的活动对象重新定位。这项研究的目标是通过使用基于空闲列表的分配器和碰撞指针分配器来减少 ZGC 中的重新定位需求,这可以在某些情况下更有效地跟踪和利用碎片内存。原创 2024-06-20 09:37:34 · 361 阅读 · 0 评论 -
JDK 23:更改默认注释处理策略
注释处理是一项编译时功能,其中 javac 扫描要编译的源文件中的注释,然后扫描类路径以查找匹配的注释处理器,以便它们可以生成源代码。在 JDK 22 之前,此功能默认启用,当它在 2006 年左右的 JDK 6 中引入时,这可能是合理的,但从当前的角度来看,为了使构建输出更可靠,以防止注释处理器被无意中放置在类路径上,这不太合理。因此,从 JDK 23 开始,javac 需要一个额外的命令行选项来启用注释处理。原创 2024-06-20 09:25:39 · 230 阅读 · 0 评论 -
扁平化堆容器的实现原理
此篇文档将会从OpenJDK Valhalla 项目如何实现扁平化堆容器的角度进行分析原创 2024-06-13 12:12:00 · 734 阅读 · 0 评论 -
JVM常用概念之扁平化堆容器
扁平化堆容器是OpenJDK Valhalla 项目提出的,其主要目标为将值对象扁平化到其堆容器中,同时支持这些容器的所有指定行为,从而达到不影响原有功能的情况下,显著减少内存空间的占用(理想条件下可以减少24倍)。原创 2024-06-13 10:37:29 · 883 阅读 · 2 评论 -
JVM常用概念之线程本地分配缓冲区(ThreadLocal Allocation Buffer,TLAB)
当实例化一个Java类时,运行时环境必须为相关实例分配存储空间,在JRE中此存储空间分配操作是有内存管理器实现的(其实是JVM的垃圾回收器),由于内存管理器通常使用与运行时目标语言不同的语言编写(例如,Java 以 JVM 为目标,而 HotSpot JVM 是用 C++ 编写的),因此接口会变得更加模糊。而这种操作成本是相当高的,并且内存管理器也必须应对多线程场景下进行内存请求多压力。为了使Java程序的运行效率尽可能接近C++等语言的运行效率,针对JVM的内存管理器的执行效率需要进行优化。原创 2024-06-10 08:54:34 · 848 阅读 · 0 评论 -
JDK23新特性:通过原始类型模式提升代码编写效率
在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。原创 2024-06-10 08:19:42 · 580 阅读 · 0 评论 -
将操作与数据分离 - 面向数据编程 v1.1
面向数据编程 (DOP) 非常注重数据,此次讨论的原则涉及实现大多数域逻辑的方法,它建议将操作与数据分开。原创 2024-06-06 10:39:38 · 1182 阅读 · 0 评论 -
JDK23将弃用 sun.misc.Unsafe中的内存访问方法并将其删除
类sun.misc.Unsafe于 2002 年推出,是 JDK 中 Java 类执行底层操作的一种方式。其大多数方法(87 种方法中的 79 种)用于访问内存,在JDK23中将通过VarHandle API(JEP 193,JDK 9)和 Foreign Function & Memory API(JEP 454,JDK 22)来彻底替换原来通过sun.misc.Unsafe实现的内存访问方法。原创 2024-06-05 10:30:58 · 1004 阅读 · 0 评论 -
让非法状态无法代表 - 面向数据的编程 v1.1
以数据为中心的系统应确保系统中只能表示合法的数据组合,因此面向数据的编程的指导原则是使非法状态无法表示。原创 2024-06-04 07:57:40 · 580 阅读 · 0 评论 -
模型数据、所有数据以及仅数据 - 面向数据编程 v1.1
面向数据编程 (DOP) 以尽可能紧密地对数据进行建模为中心,这一点并不令人意外,因此 DOP 的核心原则是对数据进行建模,即对整个数据进行建模,而不是只对数据进行建模。通过混合使用记录(records)和密封类型(sealed types)以及一些对面向对象开发人员来说可能很奇怪的编程实践,但可以最好地实现这一目标。原创 2024-06-04 07:46:07 · 657 阅读 · 0 评论 -
Java代码的执行顺序
在运行Java代码过程中,您是否疑惑过静态变量、静态方法、实例变量、实例方法、方法块、构造方法、main方法实际的执行顺序是什么样的?下面通过一个实际的例子来进行解释。原创 2024-06-03 08:48:53 · 272 阅读 · 2 评论 -
JVM常用概念之透明大页面(Huge Transparent Pages,HTP)
既然我们无法将转译后备缓冲器(Translation Lookaside Buffer,TLB) 做得更大,我们可以做其他事情:制作更大的页面!大多数硬件都有 4K 基本页面和 2M/4M/1G“大页面(Huge Pages,HP)”。使用更大的页面来覆盖同一区域也会使页表本身更小,从而降低页表遍历的成本。原创 2024-06-02 11:27:13 · 1034 阅读 · 0 评论 -
JVM常用概念之锁粗化和循环
锁粗化一般指有效地合并几个相邻的锁定块,从而减少锁定开销。原创 2024-06-02 10:44:39 · 260 阅读 · 0 评论 -
Java虚拟机的优化方法
随着时间的推移,许多优化已经提高了 JVM 的性能。然而,尽管 Java 通常是第一个成功实现它们的虚拟机,但它们也经常被用于其他类似的平台。原创 2024-06-01 08:35:45 · 1035 阅读 · 0 评论 -
OpenJDK优化技术之标量替换(Scalar Replacement)
标量替换 (SR) 是 OpenJDK 中一项强大的优化技术,旨在通过将复杂对象分解为更简单、更易于管理的标量变量来提高 Java 应用程序的性能。原创 2024-05-31 09:26:38 · 484 阅读 · 1 评论 -
不可变且透明地建模数据 - 面向数据编程 v1.1
以不变且透明的方式对数据进行建模是面向数据编程的四大原则之一。我们将探讨为何不变性和透明性在数据建模时如此重要,以及如何使用 Java 的功能(尤其是记录(Record))来实现这一点。原创 2024-05-28 08:21:43 · 520 阅读 · 0 评论 -
Java 面向数据编程-DOP
近年来,Java 获得了许多新的语言特性,这些特性可以独立使用,并且每个特性都很有用:类型模式(type patterns)、开关改进(switch improvements)、记录和记录模式( records and record patterns)、密封类型(sealed types)和一些其他模式。但有时,整体的效果远大于各部分之和,如果正确组合,这些特性可以对我们的日常编码产生重大影响。原创 2024-05-26 08:52:33 · 833 阅读 · 0 评论 -
Java高效编程:Enums和Records
本文将介绍在Java编程中枚举(Enums)和记录(Records)的使用场景及优点。原创 2024-05-22 08:56:49 · 425 阅读 · 0 评论 -
Java中的易失性读取和稳定性读取
在Java的并发编程场景下,存在如何处理变量的可见性和原子性的问题,因此就会涉及易失性读取和稳定性读取两个概念。原创 2024-05-20 09:13:31 · 166 阅读 · 0 评论 -
Java 中的动态方法调度:多态性
在面向对象编程领域,多态性是一个强大的概念,它允许将不同类型的对象视为一个共同超类的对象。在 Java 中实现多态性的关键机制之一是动态方法分派。在本文中,我们将探讨动态方法分派是什么、它是如何工作的以及它在 Java 编程中的重要性。我们还将深入研究 Java 虚拟机 (JVM) 和虚拟方法表 (VMT) 在实现动态方法分派中的作用。原创 2024-05-18 11:27:33 · 270 阅读 · 0 评论 -
Java应用程序的本地内存跟踪分析
讨论本机内存跟踪 (NMT),我们可以使用它来隔离在 VM 级别增长的任何异常内存。原创 2024-05-14 23:17:40 · 921 阅读 · 1 评论 -
虚拟线程的定义及使用
长期以来,虚拟线程是 Java 中最重要的创新之一。 它们是在 Project Loom 中开发的,自 Java 19 作为预览功能以来一直包含在 JDK 中,自 Java 21 作为最终版本 (JEP 444) 以来,它们已包含在 JDK 中。原创 2024-04-21 16:21:22 · 879 阅读 · 1 评论 -
HotSpot JVM 中的应用程序/动态类数据共享
本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能,该功能可以减少启动时间,但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档,则还可以减少内存占用。原创 2024-04-21 11:06:24 · 1140 阅读 · 0 评论 -
String和String Pool的异同
为什么 String 是不可变的? 什么是String Pool? 当你写这段代码时,创建了多少个对象 String s1 = new String("CSDN"); ? 拥有字符串池有什么好处? String.intern() 方法有什么作用?原创 2024-04-14 11:49:48 · 635 阅读 · 0 评论 -
Java调试之JDB命令行调试入门
Java 调试器 (JDB) 是一个简单的 Java 类命令行调试器。 jdb 命令及其选项调用 JDB。 jdb 命令演示了 Java 平台调试器架构,并提供本地或远程 JVM 的检查和调试。原创 2024-04-07 10:54:57 · 630 阅读 · 0 评论 -
JDK安全剖析之安全处理入门
Java 安全包括大量 API、工具以及常用安全算法、机制和协议的实现。Java 安全 API 涵盖了广泛的领域,包括加密、公钥基础设施、安全通信、身份验证和访问控制。Java 安全技术为开发人员提供了编写应用程序的全面安全框架,还为用户或管理员提供了一组工具来安全地管理应用程序。原创 2024-04-06 11:46:27 · 1140 阅读 · 0 评论 -
JDK安全剖析之术语与定义
常用的密码学术语及其定义原创 2024-04-05 22:52:17 · 1268 阅读 · 0 评论 -
JAVA中的锁
特点互斥性(Mutual Exclusion)同一个时间片只有一个线程具有读写共享变量的权限。可见性(Visibility)多线程场景下,多个线程的共享变量受到其中一个线程修改后,剩余的线程可以立刻看到修改后的值。锁的分类乐观锁(Optimistic Locking)CAS(Compare And Swap)内存地址,旧的预期值,修改的新值。举例:java.util.concurrent.atomic.*版本号悲观锁(Pessimistic Locking)在操作共享原创 2021-03-19 14:41:37 · 129 阅读 · 1 评论 -
JAVA基本数据类型
JAVA基本数据类型基本类型 位数(bit) 字节数(byte) 取值范围 封装类 boolean 1 ~ 0/1 Boolean byte 8 1 Byte char 16 2 Unicode Character short 16 2 Short int 32 4 Integer long 64 8 Lo原创 2021-03-19 14:42:18 · 108 阅读 · 0 评论 -
JAVA中常用的关键字
JAVA中常用的关键字关键字 版本及时间 应用范围 说明 示例 native JDK 1.0,1996-01-23 Method native关键字主要用于JNI(Java Native Interface),此功能主要实现与C语言的交互。 strictfp JDK 1.2,1998-12-04 Class、Interface、Method strictfp(strict float point)精确精度,由此关键字修饰的类、.原创 2021-03-19 14:42:05 · 99 阅读 · 0 评论 -
JAVA的多线程
默认main线程(用户线程)、GC线程(守护线程)线程的实现Thread类Thread实现了Runable接口,重写run方法,调用start方法启动线程。package org.thread;public class MyThread extends Thread { @Override public void run() { //TODO } public static void main(String[] args) {原创 2021-03-19 14:37:25 · 94 阅读 · 0 评论 -
JAVA的并发编程
原子性(Atomic)执行操作过程中不会被中断,要么都不执行。举例:JAVA基本类型的读写操作,变量间赋值不是原子操作 java.concurrent.Atomic.*包下所有类的所有操作可见性(Visibility)多线程场景下,多个线程的共享变量受到其中一个线程修改后,剩余的线程可以立刻看到修改后的值。举列:synchronize Lokc有序性(Orderliness)同一个线程内的所有操作都是串行的,不同线程的操作是无序的(主要原因是指令重排和线程工作内存和主内存原创 2021-03-19 14:41:53 · 86 阅读 · 0 评论 -
JDK类加载器剖析
我之所以深入研究 Java 类加载器,是为了解决一个奇怪的问题。流行出版物,也就是人们所认为的 Java 世界的灯塔,充斥着关于这个主题的相互矛盾和过时的信息。这种矛盾引发了我的调查 — — 在 Java 类加载器的迷宫中寻求清晰的答案。作为一名 Java 开发人员,您可能遇到过ClassNotFoundException一些NoClassDefFoundError神秘的消息,它们会暂时中断您的编码流程。旨在阐明这些问题的在线资源往往反而增加了混乱。原创 2024-04-05 00:04:19 · 1496 阅读 · 0 评论