JSR 94 Rule Engine

引言 许多业务应用程序必须应对市场经济的动态变化。例如,用于保险和银行业的应用程序必须能够适应在设计过程中没有人能够预测或计划的不可避免的市场...

October 18, 2021 · 25 min · Zeral

延迟队列实现

延迟队列定义 首先,队列这种数据结构相信大家都不陌生,它是一种先进先出的数据结构。普通队列中的元素是有序的,先进入队列中的元素会被优先取出进行...

June 29, 2021 · 19 min · Zeral

Java Agent

Java Instrumentation API,提供允许 Java 编程语言代理人(Agent)Instrument 在 JVM 上运行的程序的服务。 Agent:代理,以下文章中的所述代理都是指 Java...

June 5, 2021 · 13 min · Zeral

Java NIO

从 1.4 版本开始,Java 提供了另一套 I/O 系统,称为 NIO(New Input/Output 的缩写)。NIO 支持面向缓冲区的、基于通道的 I/O 操作。随着 JDK7 的发布,Java 对 NIO 系统进行了极...

May 30, 2021 · 13 min · Zeral

JVM 调优指南

从桌面上的小 applet 到大型服务器上的 Web 服务,各种各样的应用程序都使用 Java。为了支持这种多样化的部署场景,Java HotSpot VM 提供了多个垃圾收集器,每个...

May 23, 2021 · 28 min · Zeral

Java 并发编程入门

线程安全性 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变(Mutable)的状态的访问。 对象...

September 1, 2020 · 10 min · Zeral

Java 内存泄漏

1. 引言 Java 的核心优势之一是借助 JVM 内置的垃圾收集器(或简称 GC)的自动内存管理。GC 隐式地负责分配和释放内存,因此能够处理大多数内存泄漏问题。 尽...

July 16, 2020 · 13 min · Zeral

Java HashMap

基础 我们先大概瞥一眼 JDK 1.7 之前的 HashMap 结构: 简而言之,HashMap 是由数组组成的一定数量的桶(bucket)。在进行存储时,使用 key 的 hashcode() 通过 hash 函数...

July 4, 2020 · 11 min · Zeral

Map.merge()

Map.merge() Map.merge() 在键值范围中可能是功能最丰富的操作。而且还比较晦涩,很少使用。 merge() 可以解释如下:如果键值不存在(if absent),将新值放在给定键下;否则使用给定值更新现有键(UPSERT)。让我们从最基本的示例开始:计算唯一单词的出现次数。Java 8 之前的实现比较麻烦: ...

June 29, 2020 · 3 min · Zeral

Java Object 由内及外

1. 引言 Java 对象需要占用多少内存,这是一个经常被提及的问题。在缺少 sizeof 运算符的情况下,人们不禁想知道代码对其占用空间的影响。在本文中,我们将尝试窥视 Java 对象内部并查看其背后的内容。 2. 探讨更深入的设计与实现方面的问题 Deeper Design and Implementation Questions (DDIQ),在某些章节中,您可能会看到其中包含有关设计/实现问题的更多讨论。这些并不能保证回答所有问题,但他们确实尝试回答最常见的问题。答案基于个人的理解,因此可能是不准确,不完整或两者兼而有之。 ...

June 28, 2020 · 17 min · Zeral