- 博客(17)
- 收藏
- 关注
原创 JAVA基础-java虚拟机
文章摘要:JVM是运行在计算机上的应用程序,为Java程序提供统一、稳定的运行平台。其主要功能包括解释执行、内存管理和即时编译。JVM通过类加载器加载字节码文件,运行时数据区管理内存,执行引擎负责执行代码。常见的JVM版本有HotSpot、GraalVM等。垃圾回收采用自动管理机制,通过可达性分析算法判断对象存活,使用标记清除、复制、标记整理等算法回收内存。垃圾回收器如G1、CMS等针对不同场景优化性能。JVM的运行时数据区包括线程私有的程序计数器、栈和共享的堆、方法区,各部分协同工作保证Java程序高效运
2025-08-22 14:58:34
918
原创 JAVA基础-反射
摘要:反射机制允许程序在运行时动态获取类信息并操作对象,是Java高级特性之一。其核心是通过Class对象获取构造器、方法和字段,利用Method.invoke()实现方法调用。反射虽强大但存在缺陷:破坏封装性(可访问私有成员)和性能开销(需动态解析)。主要应用于框架开发(如Spring)、动态代理和注解处理等场景。JDK通过委派模式优化反射调用,在本地实现和动态生成字节码间切换以平衡性能。常用API包括Class.forName()、getDeclaredFields()和setAccessible()等
2025-08-09 11:37:33
355
原创 JAVA基础-使用BIO / NIO实现聊天室功能
本文介绍了两种Java网络编程实现的聊天室方案。基于BIO的同步阻塞模型使用ServerSocket为每个客户端创建独立线程,代码简单但资源利用效率低。基于NIO的异步非阻塞模型通过Selector实现IO多路复用,单线程可管理多个连接,具有高并发优势但实现复杂。两种方案展示了网络编程中的关键权衡:BIO适合低并发场景,开发简单;NIO适合高并发需求,性能优越但开发难度大。文章通过具体代码对比了两种方案的实现差异和适用场景。
2025-08-09 11:35:02
663
原创 JAVA基础-NIO
本文对比了Java传统IO与NIO的核心差异与应用场景。传统IO采用阻塞模型,每个连接需单独线程处理,导致资源浪费和性能瓶颈;而NIO通过非阻塞模式和选择器机制,实现单线程管理多连接,显著提升网络传输性能。测试显示NIO处理10000请求耗时仅23950ms,远优于传统IO的122803ms。文章还介绍了NIO的关键组件(Buffer、Channel、Selector)及高级特性(内存映射、直接缓冲区、异步文件通道),并对比了BIO、NIO、AIO三种IO模型的适用场景。最后详细解析了Paths和Files
2025-08-08 11:41:13
842
原创 JAVA基础-I/O
本文摘要: Java文件操作主要涉及File类、流处理和序列化三部分。File类用于文件/目录管理,但不支持内容读写;流处理分为字节流和字符流,包括基本I/O流、缓冲流和转换流等,支持不同场景下的文件读写和数据处理;序列化提供了Serializable和Externalizable两种方式实现对象持久化。文章详细介绍了各种流的特点、构造方法、常用操作和性能优化,并提供了文件搜索、复制等实用代码示例,同时强调了跨平台兼容性和内存管理注意事项。
2025-08-08 11:38:06
945
原创 JAVA基础-集合框架
本文主要分析了Java集合框架中ArrayList、LinkedList、HashMap、LinkedHashMap、TreeMap、ArrayDeque和PriorityQueue的实现原理及常用方法。ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入删除效率高;HashMap采用数组+链表/红黑树结构,提供高效键值对存储;LinkedHashMap继承HashMap并维护插入/访问顺序;TreeMap基于红黑树实现自动排序;ArrayDeque作为高效的双端
2025-08-08 11:34:43
856
原创 JAVA基础-网络编程
本文介绍了计算机网络基础概念和Java网络编程的实现方法。主要内容包括:1) 计算机网络和互联网的基本概念,TCP/IP协议栈及OSI模型;2) Java网络编程核心类Socket的使用,包括TCP协议的ServerSocket/Socket和UDP协议的DatagramSocket;3) 通过示例代码演示了TCP客户端/服务端通信、多客户端处理以及UDP通信的实现;4) 详细解析了HTTP请求/响应格式,并实现了一个简易HTTP服务器。文章重点讲解了如何在Java中利用Socket进行网络通信,包括TCP
2025-08-08 11:31:53
526
原创 并发编程-ConcurrentHashMap线程安全的哈希表
摘要:ConcurrentHashMap是Java并发包中的线程安全哈希表实现。与HashMap不同,它通过分段锁(JDK1.7)或CAS+synchronized(JDK1.8)保证线程安全。1.8版本取消了分段锁,改用Node数组+链表/红黑树结构,使用synchronized锁定头节点配合CAS操作,支持更高并发度。关键特性包括:初始化延迟到首次put时完成,扩容时支持多线程协助迁移数据,通过sizeCtl控制并发扩容,当链表长度超过8时转换为红黑树提升查询效率。其线程安全机制避免了HashMap在多
2025-07-22 15:38:57
1713
原创 并发编程-并发容器
摘要:同步容器(如Vector、Hashtable)采用粗粒度锁机制,存在并发性能差和复合操作非原子性问题。并发容器(如ConcurrentHashMap)通过精细锁(分段锁、CAS)解决了这些问题,提供更高并发性能、原子性复合操作、弱一致性迭代器,以及阻塞队列等高级功能。代码示例显示同步容器需外置同步确保复合操作安全,而并发容器内置原子操作且支持并发修改下的安全迭代。
2025-07-21 18:31:34
292
原创 并发编程-等待通知条件Condition
本文介绍了Java中Condition接口的实现原理和使用方法。Condition是AQS的内部类ConditionObject,通过await()和signal()等方法实现线程间的协调通信。与Object的wait/notify相比,Condition支持更细粒度的控制,一个锁可以绑定多个Condition。核心实现包括等待队列管理、线程状态转换和锁重入机制。Condition常用于生产者-消费者模式,示例展示了其基本用法。Condition提供了比传统wait/notify更灵活的线程同步方式,是Ja
2025-07-21 15:28:07
952
原创 并发编程-读写锁ReentrantReadWriteLock
摘要:ReentrantReadWriteLock是Java中的读写锁实现,支持读读共享、读写互斥和写写互斥的特性。它通过AQS实现,在读多写少场景下能显著提升性能。写锁是独占式的,通过重写tryAcquire实现同步;读锁是共享式的,通过tryAcquireShared实现。该锁支持锁降级(写锁转读锁),但不支持锁升级。典型应用场景包括缓存系统等读多写少的环境,通过合理使用可保证数据一致性同时提高并发性能。
2025-07-20 17:59:26
1694
原创 并发编程-重入锁ReentrantLock
ReentrantLock通过状态计数和线程检查机制实现重入性,允许同一线程多次获取锁,需相应次数的释放操作。它支持公平锁(FIFO)和非公平锁,默认非公平锁。相比synchronized,ReentrantLock需手动释放锁,可绑定多个Condition实现精准通知,在高并发场景性能更优。测试显示,在10线程百万次递增场景下,ReentrantLock耗时85ms,synchronized耗时326ms。但选用时需权衡功能需求与代码复杂度。
2025-07-20 11:05:21
449
原创 并发编程-锁分类以及JUC包下的锁
摘要:本文系统介绍了Java并发编程中的锁机制及其优化方案。首先分析了synchronized的局限性,包括无法区分读写操作、无获取锁状态反馈及阻塞问题。随后详细讲解了多种锁分类:悲观锁与乐观锁、自旋锁与自适应自旋锁、可重入锁与非可重入锁、公平锁与非公平锁、读写锁与排他锁。重点阐述了JUC包下的核心组件,包括AQS抽象类和Lock接口体系(ReentrantLock、ReadWriteLock等)。最后通过代码示例展示了Semaphore、CountDownLatch和Exchanger三种实用并发工具类的
2025-07-17 17:49:43
923
原创 并发编程-乐观锁CAS
摘要:CAS(比较并交换)是一种无锁的原子操作,通过比较内存值与预期值来决定是否更新,适用于乐观锁场景。Java通过Unsafe类实现CAS操作,AtomicInteger等原子类基于此实现线程安全。CAS存在ABA问题(可用AtomicStampedReference解决)、长时间自旋消耗CPU(可优化pause指令)和多共享变量原子性无法保证(可用AtomicReference或锁)三大问题。乐观锁适合读多写少,悲观锁适合写多读少。
2025-06-30 20:04:36
1008
原创 并发编程-synchronized关键字
摘要:synchronized关键字是Java实现线程同步的核心机制,提供原子性、可见性和有序性保证。其三种基本用法包括同步实例方法、同步静态方法和同步代码块。synchronized基于对象头中的MarkWord实现锁状态管理,包含四种锁状态:无锁、偏向锁(适用于单线程访问)、轻量级锁(CAS自旋优化)和重量级锁(操作系统互斥锁)。锁会根据竞争情况动态升级,从偏向锁逐步升级到重量级锁,这种设计在JDK1.6后大幅提升了并发性能。每个Java对象都关联一个Monitor监视器,包含锁状态和等待/通知机制,实
2025-06-29 19:17:16
1849
原创 并发编程-volatile关键字
摘要:volatile关键字通过写屏障和读屏障保证变量可见性,确保写操作提交到主存,读操作从主存读取。它能禁止指令重排,建立happens-before关系,但不适用于非原子操作(如++)。在单例模式中,volatile防止指令重排导致未初始化对象被访问。其底层通过内存屏障实现,提供指令顺序保障和内存一致性,但无法保证原子性。volatile适用于需要可见性和有序性但非原子性要求的场景。
2025-06-29 16:33:10
313
原创 并发编程-Java内存模型(JMM)
在Java运行时内存区域中:方法区、堆是线程共享栈、程序计数器则是线程私有存储在方法区及堆中的变量为共享变量:方法区:静态变量堆:成员变量内存的可见性针对的是堆及方法区中的共享变量顺序一致性模型是一个理想化的理论参考模型,它为程序提供了极强的内存可见性保证。顺序一致性模型的两个特征:一个线程中所有操作需要必须按照程序的顺序来执行不管程序是否同步,所有线程都只能看到一个单一的操作执行顺序。即在顺序一致性模型中,每个操作必须是原子性的,且立刻对所有线程可见。
2025-06-28 19:37:08
941
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅