自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 JVM虚拟机-Runtime Data Areas运行时数据区

摘要:本文详细解析了JVM运行时数据区的核心结构,主要包括线程私有的程序计数器、虚拟机栈、本地方法栈,以及线程共享的堆和方法区。程序计数器记录指令地址,虚拟机栈存储方法调用的栈帧(包含局部变量表、操作数栈等),本地方法栈支持Native方法调用。堆是对象实例的主要存储区域,分为新生代和老年代,采用不同GC策略。方法区存储类信息、常量等,JDK1.8后由元空间实现。文章还深入分析了各区域的异常情况(如StackOverflowError、OOM)和调优参数配置,为JVM性能优化提供了理论基础。

2026-01-05 20:01:26 485

原创 JVM虚拟机-Class Loader类加载器

ClassLoader是JVM的核心组件,负责动态加载Java类到内存中,生成对应的Class对象。类加载过程分为五个阶段:加载(获取类二进制数据)、验证(确保安全性)、准备(分配内存并设零值)、解析(符号引用转直接引用)和初始化(执行静态代码块)。类加载器采用双亲委派模型,包括启动类加载器(核心库)、扩展类加载器(ext目录)、应用类加载器(classpath)和自定义类加载器。该机制实现了按需加载,确保类安全性和避免重复加载。

2026-01-04 01:07:52 606

原创 JVM虚拟机(Java Virtual Machine)概览

JVM是Java跨平台运行的核心,主要由类加载器、运行时数据区和执行引擎组成。类加载器采用双亲委派模型加载类文件,运行时数据区包括堆、栈、方法区等内存区域,执行引擎包含解释器、JIT编译器和垃圾回收器。JVM调优涉及堆内存设置、GC选择等参数配置,并提供jstat、jmap等监控工具。从Java7到17,JVM不断演进,如引入G1收集器、用元空间替代永久代等优化。JVM的架构设计实现了Java"一次编写,到处运行"的特性。

2026-01-03 01:22:35 813

原创 Java的反射机制

摘要:反射是Java运行时动态获取类信息并操作对象的机制,支持动态创建对象、访问私有成员和方法调用。核心类包括Class、Field、Method等,获取Class对象有四种方式。反射虽灵活(Spring/Hibernate框架基础),但存在性能开销和安全隐患。应用场景包括IoC容器、AOP代理、ORM映射等。可通过缓存反射对象、MethodHandle等方式优化性能,需注意反射会破坏封装性,单例模式可通过构造器检查防范。泛型在反射中受类型擦除影响,但仍可获取声明时的泛型信息。

2025-12-28 20:17:55 568

原创 Java 泛型 (Generics)

Java泛型是JDK1.5引入的特性,通过类型参数实现参数化类型,提供编译期类型检查、消除强制转换并提高代码复用性。泛型包括类、接口和方法三种使用方式,采用类型擦除机制在编译时检查类型安全,运行时擦除为原始类型以保持兼容性。泛型命名遵循T(类型)、E(元素)、K(键)、V(值)等约定。由于类型擦除,泛型存在不能实例化类型参数、创建泛型数组等限制。通过通配符(? extends/super T)实现灵活的类型关系,遵循PECS(Producer-Extends, Consumer-Super)原则处理泛型集合

2025-12-28 17:27:57 921

原创 Java8的新特性

Java8核心特性摘要(148字) Java8引入了多项重要特性:1)Lambda表达式简化函数式编程,支持方法引用;2)Stream API提供声明式数据流处理,支持并行计算;3)Optional类优雅处理null值;4)函数式接口支持行为参数化;5)接口默认方法解决接口演化问题;6)全新线程安全的日期时间API替代旧实现;7)元空间替代永久代优化内存管理;8)新增CompletableFuture等并发工具类。这些改进使Java支持现代编程范式,提升开发效率和代码可读性,同时保持向后兼容性。

2025-12-25 20:22:22 584

原创 Java的序列化与反序列化

本文介绍了Java序列化的核心概念与应用。序列化是将对象转换为字节流以便存储或传输,反序列化则是逆向过程。主要用途包括缓存、持久化存储、网络传输和RPC调用。实现方式包括Serializable(常用)和Externalizable(自定义)接口,需注意serialVersionUID版本控制、transient字段处理、静态变量不参与序列化等特性。文章还探讨了循环引用、安全风险等常见问题及解决方案,并列举了典型面试问题。

2025-12-24 18:45:32 542

原创 Java中线程间的通信方式

本文介绍了两种线程通信方式:共享内存和同步机制。共享内存通过读写共享变量实现通信,包括普通共享变量(存在线程安全问题)和volatile变量(保证可见性但不保证原子性)。同步机制通过锁等工具控制线程执行顺序,包括三种实现:1)synchronized配合wait/notify,基于对象监视器;2)ReentrantLock结合Condition,提供更灵活的锁控制;3)BlockingQueue作为高级封装,内置线程安全机制自动处理阻塞/唤醒。这些方法各具特点,适用于不同场景的线程通信需求。

2025-12-23 19:32:08 257

原创 synchronized 总结

Java中的synchronized关键字是解决多线程并发安全问题的内置锁机制。它通过修饰方法或代码块,确保同一时刻只有一个线程执行同步代码,解决了原子性、可见性和有序性问题。其实现基于Monitor模型,JDK1.6后引入锁升级策略(无锁→偏向锁→轻量级锁→重量级锁)优化性能。相比ReentrantLock,synchronized是隐式锁,不支持中断等待、超时设置和公平锁,且不能使用字符串字面量作为锁对象(因字符串常量池共享性)。该机制通过内存屏障保证happens-before关系。

2025-12-20 00:19:55 711

原创 Java中的内存屏障(Memory Barrier)

内存屏障是多线程编程中控制内存操作顺序的机制,主要用于解决多核处理器的内存可见性和指令重排序问题。主要分为四种类型:LoadLoad屏障确保读取操作顺序,StoreStore屏障保证写入操作可见性,LoadStore屏障防止写操作重排序到读操作前,StoreLoad屏障是最强屏障,保证写操作可见后才执行读操作。在synchronized和volatile中都会使用这些屏障。

2025-12-19 23:38:30 268

原创 Java中的线程安全是什么?

摘要:线程安全涉及解决多线程并发时的原子性、可见性和有序性问题。实现方案包括:1)保证原子性:使用互斥锁、原子类或线程封闭;2)保证可见性:通过volatile关键字或锁机制确保修改可见;3)保证有序性:利用volatile内存屏障、锁语义或happens-before规则防止指令重排序。这些机制共同确保多线程环境下程序的正确执行。

2025-12-17 09:08:49 902

原创 什么是Java中的CAS(Compare-And-Swap)操作

摘要:Compare-And-Swap(CAS)是一种无锁并发算法的基础原子指令,适用于读多写少场景。其核心是通过原子性地比较内存值与预期值,相等则更新,否则重试。CAS具有无锁并发和原子性优点,但也存在ABA问题、自旋开销和单变量限制等缺点。Java中通过Atomic原子类实现CAS,如AtomicInteger的compareAndSet方法。该机制避免了线程阻塞,但高并发时可能浪费CPU资源。

2025-12-15 17:22:16 202

原创 什么是Java中的线程同步

通过特定的机制,协调多个线程对共享资源的访问,确保在任何时刻只有一个(或可控数量的)线程能执行特定的代码段或访问特定的数据,从而避免因并发访问导致数据的不一致性、计算错误等并发问题。

2025-12-12 19:30:09 226

原创 Java中如何定义线程的生命周期

本文详细介绍了Java线程的六种状态及其转换过程。线程状态包括:NEW(新建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(超时等待)和TERMINATED(终止)。通过多个代码示例演示了不同状态间的转换场景,如通过wait()/notify()实现WAITING状态,使用sleep()进入TIMED_WAITING状态,以及同步锁导致的BLOCKED状态等。

2025-12-11 13:39:21 856

原创 创建线程执行任务的方式

本文总结了Java中实现多线程的四种主要方式:1)继承Thread类(不推荐);2)实现Runnable接口(推荐);3)实现Callable接口(可返回结果);4)使用Executor线程池框架(最佳实践)。详细介绍了每种方式的标准实现、匿名内部类实现和Lambda表达式实现,并对比了Runnable与Callable的差异。特别强调了生产环境应避免使用Executors工厂方法创建线程池,因其隐藏关键参数可能导致内存溢出或资源耗尽,推荐直接使用ThreadPoolExecutor构造函数。

2025-12-09 18:20:26 259

原创 Oracle 数据库新建用户 ORA-65096: 公用用户名或角色名无效

ORA-65096: 公用用户名或角色名无效

2025-06-11 11:25:24 1310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除