当前位置: 首页 > news >正文

零基础入门Java虚拟机与单例模式:新手友好教程


一、Java虚拟机(JVM)体系结构

1. 什么是JVM?
JVM是Java程序的运行环境,负责将.class字节码文件翻译成机器指令。不同厂商(如Oracle、IBM)可按规范实现自己的JVM,常见的实现包括:

  • HotSpot:Oracle JDK/OpenJDK默认JVM,优化了性能。
  • JRockit:曾专注于服务器端优化,现技术已整合至HotSpot。
  • IBM J9:IBM JDK的核心,以低内存占用和快速启动著称。
  • Azul Zing:专为高负载企业应用设计,支持实时处理。
  • OpenJ9:轻量级开源实现,适合云原生环境。

2. JVM运行时数据区
JVM启动时创建以下内存区域,程序运行期间始终存在:

区域名称功能说明类比现实场景
程序计数器记录当前线程执行的字节码指令地址(类似“书签”)。读书时标记当前页码
虚拟机栈存储方法调用的局部变量、操作数栈等(每个方法对应一个栈帧)。文件夹中叠放的纸质文件
堆(Heap)存放所有对象实例和数组,是垃圾回收(GC)的主要区域。仓库,存放所有生产出的商品
方法区存储类信息、常量、静态变量等(Java 8后称为“元空间”)。图书馆的书籍目录和档案室
运行时常量池方法区的一部分,存放编译期生成的常量(如字符串"Hello")。书籍中的固定公式表
本地方法栈为Native方法(如C/C++代码)提供服务,与虚拟机栈类似。特殊工具箱,存放非标准工具

二、单例模式:一个对象的全局唯一性

1. 什么是设计模式?
设计模式是解决软件设计问题的通用模板。单例模式属于创建型模式,确保一个类只有一个实例,并提供全局访问点。

2. 单例模式的核心实现

public class Singleton {
// 1. 私有化构造方法(禁止外部new对象)
private Singleton() {}
// 2. 定义静态变量,类加载时初始化实例
private static final Singleton INSTANCE = new Singleton();
// 3. 提供公开的静态方法获取实例
public static Singleton getInstance() {
return INSTANCE;
}
}

3. 懒汉式单例(延迟初始化)

public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}

注意事项

  • 线程安全:基础懒汉模式需加synchronized关键字,或使用双重检查锁(Double-Checked Locking)。
  • 性能优化:推荐使用静态内部类或枚举实现,避免同步开销。

Jvm体系结构

jvm对应了一套规范(java虚拟机规范),它可以有不同的实现

  1. Java规范是一种抽象的概念,它可以用于多种不同的实现
    1. HotSpot:由Oracle公司开发,是目前最常用的虚拟机实现,也是目前最常用的虚拟机实现,也是默认的Java虚拟机,默认包含在Oracle JDK和OpenJDK中
    2. JRockit:JRockit是由Oracle公司开发,它是一款针对生产环境优化JVM实现,能够提供性能和可伸缩性
    3. IBM JDK:IBM JDK是由IBM公司开发的java环境,采用Hotspot不同的J9VM,能够提供更小的内存占用和更迅速的启动时间
    4. Azul Zing:是针对生产环境优化的虚拟机实现,能够提高性能和实时处理能力,适用于高负载企业应用和实时分析场景
    5. OpenJ9:是由IBM开发优化的Java虚拟机实现,支持高度轻量级,低时延时的GC优化的JIT编译器和用于健康度测试的可观察下仪表盘

  1. Jvm规范中运行时数据区
    1. The pc Register(程序计数器):是一块较小的内存空间,此计数器记录的是正在执行的虚拟机字节码指令的地址
    2. Java Virtual Machine Stacks(java虚拟机栈):Java虚拟机用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
    3. Heap(堆):是java虚拟机管理的最大的一块内存,堆内存用于存放Java对象实例以及数组。堆是垃圾收集器的主要区域。
    4. Method Area(方法区):用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码和数据。
    5. Run-Time Constant Pool(运行时常量池):是方法区的一部分,用于存放编译期生成的各种自变量与符号引用
    6. Native Method Stacks(本地方法栈):在本地方法的执行过程中,会使用到本地方法栈。和java虚拟机栈十分相似/

总结:这些运行时数据区虽然在功能上有所区别,但再整个Java虚拟机启动时都需要被创建,并且在虚拟机运行期间始终存在,直到虚拟机停止运行时被销毁。同时不同的JVM实现对运行时数据区的分配和管理方式也可能不同,会对性能和功能产生影响

单例模式(一个对象)

设计模式概述

什么是概述模式

设计模式是一套被广泛接受的,经过试验的,可以重复利用的解决方案。设计模式是针对软件开发常见问题和模式的通用解决方案。

设计模式有哪些

GoF设计模式

架构设计模式

企业级设计模式

领域驱动设计模式

并发设计模式

数据访问模式

GoF设计模式分类

创建型:主要解决对象创建问题

结构型:通过设计和构建对象之间的关系,达到更好的重用性、拓展性、灵活性

行为型:主要用于对象之间的算法与责任分配

                              

单例模式怎么实现

构造方法私有化

对外提供一个公开的静态方法

定义一个静态变量,类加载的时候,初始化静态变量

http://www.dtcms.com/a/278569.html

相关文章:

  • Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(二)
  • VSCODE 选中多行 需要同时按住alt键才可以
  • ShenYu实战、问题记录
  • 记字节前端面试一道简单的算法题
  • 注解@Autowired和@Resource的区别
  • CentOS7 OpenSSL升级1.1.1t;OpenSSH 升级 9.8p1 保姆级教程
  • jenkins 流水线比较简单直观的
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Spring Boot - Spring Boot 集成 MyBatis 分页实现 PageHelper
  • 17.Python 中的相等性比较:== vs is
  • 具身智能零碎知识点(五):VAE中对使用KL散度的理解
  • 【Java EE初阶 --- 网络原理】初识网络
  • flink 和 spark 架构的对比
  • 如何在 Java 中使用 Redis 实现缓存优化?
  • 4G模块 A7670发送英文短信到手机
  • 11.设置 Python 3 和 pip 3 为默认版本
  • Google的Mediapipe开源框架介绍及使用说明
  • 基于浅切多道的晶圆切割 TTV 均匀性控制与应力释放技术
  • python学智能算法(十八)|SVM基础概念-向量点积
  • CentOS 安装jenkins笔记
  • windows在anaconda中下载安装fasttext
  • jenkins搭建笔记
  • .gitignore文件中的各种写法详解
  • JMeter 连接与配置 ClickHouse 数据库
  • JavaScript 高级封装方法指南
  • 将CSDN文章导出为PDF
  • RabbitMQ的介绍与安装
  • 嵌入式小记
  • 亚马逊自养号技术栈解析:从环境隔离到AI行为模拟的实战指南
  • C++编程语言:标准库:内存和资源管理(Bjarne Stroustrup)