Java

在Java中写一个正确的单例模式

陈曦
本文参考极客时间每日一课《在Java中如何写一个正确的单例模式?》 1. 单例/单例设计模式 一个类只允许创建一个对象(实例),这个类就是一个单例类。这种设计模式叫做单例设计模式,简称单例模式。 实现一个单例类,需要关注: 构造函数私有,避免通过new关键字创建实例 创建时的线程安全问题 是否支持延迟加载 getInstance是否高性能(锁) 2. 单例模式的写法 2.1. 饿汉式 public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() { } public static Singleton getInstance() { return INSTANCE; } } public class Singleton { private static Singleton instance; static { instance = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return instance; } } 类加载时,静态实例就已经创建好并初始化好了。

GC日志解读

陈曦
为深入学习GC(Garbage Collection,垃圾回收),本文将使用一段测试代码来测试不同的GC策略下的执行情况,并对输出的GC日志做简要分析。 1. 测试环境 1.1. 操作系统及jdk版本 ➜ 01jvm git:(main) ✗ java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) 1.2. 测试代码 测试代码来源: https://github.com/JavaCourse00/JavaCourseCodes/blob/main/01jvm/GCLogAnalysis.java import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.LongAdder; /* 演示GC日志生成与解读 */ public class GCLogAnalysis { private static Random random = new Random(); public static void main(String[] args) { // 当前毫秒时间戳 long startMillis = System.currentTimeMillis(); // 持续运行毫秒数; 可根据需要进行修改 long timeoutMillis = TimeUnit.