
Java
文章平均质量分 93
Java 是一种广泛使用的面向对象的编程语言,由 James Gosling 领导的团队在 Sun Microsystems 开发并在 1995 年发布。Java 设计的主要目标之一是编写一次,到处运行(Write Once, Run Anywhere, WORA),这意味着编写的 Java 程序可
热带鱼Tech
这个作者很懒,什么都没留下…
展开
-
Java 入门指南:并发设计模式 —— Copy-on-Write 模式
CopyOnWrite(写时复制,简称COW)是一种在计算机领域中广泛应用的优化策略,主要用于提高内存和存储的使用效率,同时确保数据的一致性和线程安全。CopyOnWrite 的核心思想是,在多个调用者(如线程或进程)共享相同资源(如内存或磁盘上的数据存储)时,他们最初会共同获取相同的指针或引用指向该资源。当某个调用者尝试修改资源时,系统会为其创建一个资源的副本,并将修改操作应用到这个副本上,而其他调用者则继续访问原始资源,从而避免了因修改操作而对其他调用者造成影响。原创 2024-09-27 23:41:22 · 1096 阅读 · 0 评论 -
Java 入门指南:并发设计模式 —— 两端终止模式
Java中的两段终止模式(Two-phase termination pattern),通常称为“钩子-屏障”模式(hook-barrier pattern),是一种用于优雅地安全关闭应用程序的技术。这种模式旨在确保在应用程序正常关闭时,所有线程都能够正确地进行清理工作,避免资源泄露和其他潜在的问题。尤其是在处理资源密集型任务(如文件I/O、数据库连接等)时尤为重要。原创 2024-09-27 15:01:44 · 1042 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
双亲委派模型(Parent Delegation Model)是 Java 类加载机制中的一个核心概念,它用于组织和管理 Java 类加载器的工作方式。在Java中,类加载器负责将 .class 文件加载到内存中,并通过双亲委派模型来保证类的加载过程具有一定的安全性和统一性。原创 2024-09-15 23:57:29 · 1585 阅读 · 0 评论 -
Java 入门指南:获取对象的内存地址
在 Java 开发中,了解对象的内存管理是十分重要的,尽管 Java 的设计初衷是让开发者更专注于业务逻辑而非底层资源管理。但在某些情况下,了解对象的内存位置对于调试和性能优化仍然是有帮助的。在 Java 中,不能直接输出变量的内存地址。Java 的内存管理是由 Java 虚拟机(JVM)自动处理的,实现了屏蔽底层内存细节的机制,所以开发人员无法直接访问和操作对象的内存地址。然而,我们可以通过一些方法和技巧来模拟或获取对象的内存位置信息。原创 2024-09-25 17:46:16 · 1287 阅读 · 0 评论 -
Java 入门指南:Java 8 新特性 —— Lambda 表达式
Java Lambda 表达式是 Java 8 引入的一个功能,它允许以更简洁的方式编写函数式接口的实现。Lambda 表达式可以被认为是一种匿名函数,它没有名称,但有参数列表、函数体和可能的异常列表。它可以用来替代使用匿名内部类实现函数式接口的方式Lambda 表达式可以简化代码,使代码更加简洁、可读性更强,尤其在使用函数式接口和结合 Java Stream API 进行编程时非常有用。原创 2024-09-21 23:21:04 · 1563 阅读 · 0 评论 -
Java 入门指南:Java 8 新特性 —— Stream 流
Java Stream 是 Java 8 引入的一个新的API,它提供了一种函数式编程的方式来处理集合数据。Stream 可以看作是一系列支持高效的、函数式操作的元素序列。通过使用Stream,可以对集合进行 过滤、映射、排序、查找 等操作,而不需要显示地使用循环或者迭代器。Stream API 使用一种类似于 SQL 查询的方式来操作数据,这样可以使代码更加简洁、可读性更强。原创 2024-09-21 22:32:32 · 1928 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器
ZGC(Z Garbage Collector) 是一种低延迟、可伸缩性强的垃圾回收器,是JVM 中的一项重要技术。ZGC的目标是 尽可能地减少垃圾回收对应用程序的停顿时间,并且可以处理大内存堆 。它于Java 11版本中正式发布,适用于大内存低延迟服务的内存管理和回收,在 128G 的大堆下,最大停顿时间为 1.68 ms,停顿时间远胜于 G1 和 CMS。原创 2024-09-18 18:04:15 · 1327 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java 垃圾收集器(Garbage Collector, GC)是 Java 虚拟机(JVM)的一部分,它自动管理内存,回收不再使用的对象所占用的内存空间。这有助于防止内存泄漏,并且使得开发人员可以更专注于业务逻辑的编写而不是内存管理。原创 2024-09-17 23:36:10 · 1794 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 垃圾回收算法
垃圾收集算法(Garbage Collection Algorithm) 是一种自动内存管理机制,用于在程序运行时自动识别和回收不再使用的对象,以释放内存空间和提升系统性能原创 2024-09-17 21:35:24 · 1390 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 死亡对象判断方法
堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)原创 2024-09-16 23:00:45 · 1551 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 内存分配和回收规则
垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,当需要排查各种内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。原创 2024-09-16 22:32:41 · 1610 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)—— Java 类加载器详解
类加载器(Class Loader)是 Java 虚拟机(JVM)的一部分,它的作用是将类的字节码文件(.class 文件)从磁盘或其他来源加载到 JVM 中。类加载器负责查找和加载类的字节码文件,并将其转化为 Class 对象。原创 2024-09-15 23:34:41 · 1943 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)——类的生命周期与加载过程
类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段:加载、验证、准备、解析、初始化、使用和卸载。其中,验证、准备和解析这三个阶段可以统称为连接。的生命周期除去使用和卸载,就是 Java 的类加载过程。这 5 个阶段一般是顺序发生的,但在动态绑定的情况下,解析阶段发生在初始化阶段之后。系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。原创 2024-09-15 22:06:47 · 1747 阅读 · 0 评论 -
Java 入门指南:Java 并发编程模式 —— 生产者-消费者模式
生产者/消费者模式是一种重要的多线程设计模式,它通过引入共享队列来实现生产者和消费者之间的解耦。这种模式不仅可以提高系统的并发性和灵活性,还可以平滑负载,适用于多种应用场景。通过使用阻塞队列、wait/notify 机制或者 Exchanger,可以方便地实现生产者/消费者模式,并解决多线程环境下数据生产和消费的问题。原创 2024-09-13 23:03:04 · 1461 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 同步工具类 Exchanger(交换器)
Exchanger(交换器)是Java中的一种同步辅助类,用于两个线程之间进行数据交换。它提供了一个同步点,当两个线程都到达该点时,它们可以交换数据并继续执行。Exchanger 的使用场景通常是需要两个线程之间进行数据交换,其中一个线程作为生产者,另一个线程作为消费者。两个线程在交换点处进行阻塞等待,当两个线程都到达交换点时,它们可以交换自己的数据。原创 2024-09-13 14:05:33 · 953 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 同步工具类 Phaser(相位器)
Phaser(相位器)是Java中的一种同步辅助类,用于控制多个线程的阶段性任务同步。它提供了更灵活和高级的同步机制,可以动态地适应参与线程的数量。Phaser 可以看作功能增强的 CyclicBarrier,与 CyclicBarrier(循环屏障) 和 CountDownLatch(倒计时门闩) 等传统同步工具相比,Phaser 提供了更灵活和更高级的功能,特别是在处理动态和可变的并行任务集合时。原创 2024-09-11 23:11:24 · 1230 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 同步工具类 CyclicBarrier(循环屏障)
CyclicBarrier(循环屏障)是 Java 中的一种同步辅助类,用于控制多个线程在某个屏障点上等待,然后在达到屏障点时一起继续执行。它允许一组线程互相等待,直到所有线程都达到某个公共屏障点(也称为同步点),然后这些线程才会一起继续执行后续的任务。与 CountDownLatch 类似,但可以重复使用。原创 2024-09-11 22:24:02 · 969 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 同步工具类 CountDownLatch(倒计时门闩)
CountDownLatch(倒计时门闩)是 Java 中的一种同步辅助类,用于控制多个线程之间的协调,允许一个或多个线程等待其他线程完成一组操作。CountDownLatch 通过维护一个计数器来实现,计数器初始值可以设定为一个正整数(通常为需要等待的线程数量或任务数量)。每当一个线程完成任务后,计数器的值就会减1。当计数器的值减到 0 时,所有等待的线程都会被释放,此时所有因调用 await() 方法而阻塞的线程都会被唤醒,继续执行后续的操作。原创 2024-09-10 23:26:59 · 1320 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 同步工具类 Semephore(信号量)
Semaphore(信号量)是一种并发控制机制,可用于管理对共享资源的访问以及线程间的同步。Semaphore 通过控制许可数量(permits),实现了对并发线程数的精细管理,有效避免了资源竞争和过载问题,能显著提升系统吞吐量和响应速度。通常被用于限制对某个资源或资源池的并发访问数量。原创 2024-09-10 23:17:46 · 1239 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)—— Java 类文件结构
在 Java 中,JVM 可以理解的代码是字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。.class 文件是不同的语言在 Java 虚拟机之间的重要桥梁,同时也是支持 Java 跨平台很重要的一个原因。根据 Java 虚拟机规范,Class 文件通过 ClassFile 定义,有点类似 C 语言的结构体。原创 2024-09-09 17:38:43 · 1235 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)—— HotSpot 处理 Java 堆中的对象
HotSpot 是 Sun Microsystems(现为 Oracle Corporation 的一部分)开发的一款高性能的 Java 虚拟机(JVM)实现。它是当前最流行的 Java 虚拟机之一,广泛应用于各种 Java 应用程序中。HotSpot 虚拟机在 Java 堆中对象的分配、布局和访问是一个高度优化的过程。通过动态编译和内存管理技术,HotSpot 能够有效地管理对象的生命周期,提高 Java 应用程序的性能。原创 2024-09-09 12:09:55 · 2144 阅读 · 0 评论 -
Java 入门指南:JVM(Java虚拟机)—— Java 内存运行时的数据区域
对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C++程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。由于程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,若不了解虚拟机是怎样使用内存的,排查错误将会是一个非常艰巨的任务。原创 2024-09-08 21:47:33 · 1881 阅读 · 0 评论 -
Java 入门指南:初识 JVM Java虚拟机(Java Virtual Machine)
Java虚拟机(JVM)是一种抽象计算模型,它在软件层面模拟了一个计算机,允许开发者编写平台无关的程序。Java程序被编译成一种中间表示——字节码(Bytecode),然后由 JVM 解释执行或通过即时编译器(JIT)转换为本地机器码运行。这一特性使得Java应用可以在任何安装了JVM 的操作系统上运行,真正实现了“一次编写,到处运行”的目标。原创 2024-09-08 21:09:57 · 1137 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedDeque
ConcurrentLinkedDeque 是 Java 并发工具包(java.util.concurrent 包)中的一个线程安全的双端队列(Deque)实现,实现了 Deque 接口。它使用了链表结构,并且针对高并发环境进行了优化,非常适合用于多线程环境中需要安全地并发访问双端队列的情况。ConcurrentLinkedDeque 不使用锁来保证线程安全,而是通过 CAS(Compare and Swap)原子操作来实现线程安全。原创 2024-09-07 22:52:17 · 1563 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedQueue
ConcurrentLinkedQueue 是Java中的一个并发队列实现,是一个基于链接节点(链表)的无界的线程安全非阻塞队列,适用于多线程环境下的并发访问,即多个线程访问同一个 collection 的场景。ConcurrentLinkedQueue 采用了无锁(lock-free)的算法实现,并且基于链表数据结构。它支持高效的并发插入和删除操作,以及无界的队列长度。原创 2024-09-07 16:40:53 · 1225 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— Copy-On-Write 写时复制技术
CopyOnWrite 是 Java 中一种常用的并发编程技术,指的是在修改共享资源时,不直接修改原始数据,而是在新的副本上进行操作,并最终将修改结果写回原始数据。它的核心思想是:可以容忍读操作并发,但写操作需要互斥执行(写时复制),牺牲了数据的实时性。这种技术通过减少数据共享时的并发冲突,提高了系统的整体效率和稳定性。原创 2024-09-06 23:33:06 · 1676 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— Fork/Join 框架 实现任务的拆分与合并
Fork/Join 是Java并发编程中的一个框架,用于解决大型任务的并行执行问题。它于 Java 7中引入,旨在简化对多核处理器上可并行执行任务的开发。Fork/Join 框架基于分治(divide and conquer)的设计思想。它将大型任务划分为更小的子任务(称为fork),这些子任务可以并行执行。一旦所有子任务都完成,它们的结果将被合并(称为join)以生成最终的结果。原创 2024-09-06 22:35:10 · 1112 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 ——自定义 Java 线程池
虽然 Java 的 Executors 类提供了多种静态工厂方法来创建线程池,但在某些特定场景下,这些默认的线程池配置可能并不满足我们的需求。例如,我们可能需要自定义线程池的核心线程数、最大线程数、线程存活时间、任务队列容量等参数,以便更好地适应我们的业务场景和系统资源。此时,自定义线程池就显得尤为重要。原创 2024-09-05 23:01:32 · 1435 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— Executor、Executors 构建线程池
Executor 是 Java 并发编程中的一个接口,用于执行异步任务。它定义了一组方法来提交任务并执行它们,以及管理任务的执行状态和结果。Executor 接口允许将任务提交给执行器,它将负责在后台线程中运行任务并返回结果(如果有)。执行器封装了线程池,可自动管理线程的创建、调度和销毁,从而提供了一种方便的方式来管理并发任务。原创 2024-09-05 19:17:08 · 1371 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— Java 线程池详解
线程池(ThreadPool)是一种用于管理和复用线程的机制,它可以预先创建一批线程,并维护一个线程队列,用于执行提交的任务。线程池的主要目的是提高多线程应用程序的性能和效率,通过重用已创建的线程,减少线程的创建和销毁开销,避免频繁地创建线程和线程上下文切换的性能损耗。原创 2024-09-04 23:10:31 · 1524 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 TransferQueue、LinkedTransferQueue、SynchronousQueue
TransferQueue 是 JUC 中的一个接口,它继承了 BlockingQueue 接口,在 BlockingQueue 的基础上扩展了一个 transfer() 方法,提供了一种更强大的交互方式。LinkedTransferQueue 是一个无界的、基于链表的阻塞队列,基于链表实现,其内部节点分为数据节点和请求节点。数据节点用于存储实际的数据元素,而请求节点则用于表示消费者的取数请求。SynchronousQueue(同步队列)是 JUC 中的一个没有任何容量的阻塞队列,只支持 一对一 模原创 2024-09-04 20:53:11 · 1538 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 PriorityBlockingQueue
PriorityBlockingQueue 是一个无界的并发队列。它使用了和类PriorityQueue 一样的排序规则。所有插入到 PriorityBlockingQueue 的元素必须实现 java.lang.Comparable 接口。因此该队列中元素的排序就取决于自定义的 Comparable 实现。如果元素没有实现 Comparable 接口并且没有提供自定义的比较器,将会引发 ClassCastException。原创 2024-09-04 18:54:31 · 1053 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ArrayBlockingQueue
ArrayBlockingQueue 是一个有界阻塞队列,它是基于数组实现的。按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。ArrayBlockingQueue 适用于多生产者多消费者的场景,可以很好地控制生产者和消费者的速度,以平衡系统的负载。原创 2024-09-04 17:14:43 · 1445 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 LinkedBlockingQueue
LinkedBlockingQueue 是 Java 中的一个线程安全的阻塞队列实现。实现了 BlockingQueue 接口,并使用链表作为底层数据结构,可以用于在生产者和消费者之间进行线程安全的数据传输。原创 2024-09-04 14:22:53 · 1155 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 BlockingDeque、LinkedBlockingDeque
JUC 包里的 BlockingDeque 接口表示一个线程安放入和提取实例的双端队列,继承自 BlockingQueue。BlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程;在不能够提取元素时,它将阻塞住试图提取的线程。BlockingDeque 适用于在线程中一个队列既充当生产者又充当消费者的情况。如果生产者线程需要在队列的两端都可以插入数据,消费者线程需要在队列的两端都可以移除数据,这个时候也可以使用 BlockingDeque。原创 2024-09-04 14:01:29 · 1160 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListSet
ConcurrentSkipListSet 是 Java 中的一个线程安全集合类,实现了SortedSet 接口,并基于跳表数据结构进行实现。它支持高效的插入、删除和查找操作,并提供了强一致性、线程安全的操作保证。ConcurrentSkipListSet 底层基于跳表,每个节点包含一个值和多个指向下一个节点的指针。在插入、删除、查找元素时,ConcurrentSkipListSet 会从节点的最高层级开始查找,并逐层降低层级,直到找到对应的节点或无法继续降低层级。原创 2024-09-03 21:10:35 · 1080 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap
ConcurrentSkipListMap 是 Java 中的一个线程安全集合类,实现了ConcurrentMap 接口。它支持高效的插入、删除和查找操作,并提供了强一致性、线程安全的操作保证。ConcurrentSkipListMap 底层基于跳表,每个节点包含一个键值对和多个指向下一个节点的指针。在插入、删除、查找元素时,ConcurrentSkipListMap 会从节点的最高层级开始查找,并逐层降低层级,直到找到对应的节点或无法继续降低层级。可以在高并发环境下提供高效的查找、插入、删除操作,原创 2024-09-03 19:25:53 · 1173 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentHashMap
ConcurrentHashMap 是线程安全的,支持完全并发的读取,并且有很多线程可以同时执行写入。在早期版本(例如 JDK 1.7)中,ConcurrentHashMap 使用分段锁技术。整个哈希表被分成一些段(Segment),每个段独立加锁。这样,在不同段上的操作可以并发进行。从 JDK 1.8 开始,ConcurrentHashMap 的内部实现有了很大的变化。它放弃了分段锁技术,转而采用了更先进的并发控制策略,如 CAS 操作和红黑树等,进一步提高了并发性能。原创 2024-09-03 17:01:47 · 1548 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— StampedLock 读写锁
StampedLock 是 Java 8 引入的一种新型锁机制,它综合了读写锁、乐观读锁和悲观写锁的特点,旨在提供更高效的并发访问控制。有人称它为锁的性能之王。原创 2024-09-03 12:03:35 · 1103 阅读 · 0 评论 -
Java 入门指南:Java 并发编程 —— LockSupport 线程阻塞唤醒类
LockSupport 是Java并发包中用于线程阻塞和唤醒的工具类。它提供了一种基于线程的阻塞和唤醒机制,类似于 Object 类中的 wait() 和 notify() 方法,但与 wait() 和 notify() 方法相比,LockSupport,它不依赖于对象的监视器锁,并且可以在任何地方对线程进行阻塞和唤醒操作。原创 2024-09-02 22:42:15 · 1183 阅读 · 0 评论