
Java
文章平均质量分 63
Java 相关
龙大.
初心未改,方得始终!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring 所有依赖注入的方式总结
Spring 依赖注入有多种方式,以下是。原创 2025-07-24 13:13:55 · 624 阅读 · 0 评论 -
Java 内部类全解
Java内部类分为四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。成员内部类依赖外部类实例,能访问外部类的所有成员;静态内部类独立存在,仅能访问外部类的静态成员;局部内部类定义在方法内,仅在该方法可用;匿名内部类没有类名,适合一次性使用。它们的主要区别在于访问权限(能否访问外部类实例成员)、创建方式和使用场景(如回调、事件监听等)。静态内部类可包含静态成员,其他三种则不能。内部类广泛应用于封装结构、实现回调等功能。原创 2025-07-07 19:44:02 · 701 阅读 · 0 评论 -
Apache HttpClient 的请求模型和 I/O 类型
Apache HttpClient 提供同步(BIO)和异步(NIO)两种请求模型,不同版本实现方式不同。HttpClient 4.x默认采用同步阻塞I/O,简单但线程开销大;HttpAsyncClient 4.x基于NIO实现异步非阻塞,适合高并发。HttpClient 5.x统一API,底层使用NIO,能同时支持同步/异步调用。生产环境中,高并发服务推荐异步NIO模式,普通应用可用5.x的同步API(底层仍为NIO优化)。性能方面,异步NIO的线程利用率更高,适合>1000 QPS场景,而同步BI原创 2025-07-03 12:59:31 · 325 阅读 · 0 评论 -
手搓一个记录复制记录的软件,方便快速找到之前复制内容
工作中经常有复制的诉求,当多次复制的时候,去找之前复制的内容就比较麻烦。市面上的要不是不好用,要不是就是不免费。于是打算手搓一个记录复制记录的软件,方便快速找到之前复制内容,效果还是很不错。创建一个Java 文件,然后直接复制上面代码,直接运行就行。文件名称要和ClipboardHistory一样,当然你也可以同时修改名称。原创 2025-06-13 19:32:47 · 260 阅读 · 0 评论 -
Jvm 元空间大小分配原则
JVM元空间(Metaspace)大小分配不是按物理内存固定比例,而是动态管理。默认无上限,受限于可用物理内存和MaxMetaspaceSize参数设置。JVM根据类加载需求动态扩展元空间,直到达到设定上限或系统内存耗尽。建议生产环境中设置MetaspaceSize和MaxMetaspaceSize参数,如128M初始值和512M最大值,防止内存过度占用。同时需监控元空间使用,避免类加载过多导致OOM。分配原则是按需动态扩展,最终受参数和物理内存双重限制。原创 2025-05-30 12:59:23 · 948 阅读 · 0 评论 -
Cookie 和Session的区别
特性CookieSession存储位置客户端(浏览器)服务器存储大小通常限制为 4KB相对较大过期机制可设置过期时间,浏览器关闭后消失(会话 Cookie)定期过期,通常基于时间或用户行为安全性安全性较低,容易被用户篡改更安全,客户端无直接访问权限访问速度访问速度快(在客户端)访问可能稍慢(因需访问服务器内存)用途状态保持和用户偏好存储用户数据和重要的会话信息。原创 2024-12-13 12:46:33 · 389 阅读 · 0 评论 -
一些流行的 Java HTTP 客户端库的优缺点对比
选择适合的 Java HTTP 客户端库取决于具体的应用场景、项目需求和团队的技术栈。如果希望有更高的性能和丰富功能,可以选择 Apache HttpClient 或 OkHttp;若在 Spring 环境中,可以使用 RestTemplate;对于简单请求,可以考虑用 Unirest 或 Java 11 HttpClient。Retrofit 在处理 RESTful API 时非常方便,特别适合 Android 开发。原创 2024-10-12 08:28:43 · 1062 阅读 · 0 评论 -
ConcurrentHashMap 的一些总结
通过分段锁(Java 1.7 及之前)和细粒度锁(Java 1.8 及之后)实现了线程安全,同时结合了 CAS 操作和无锁读取,极大地提高了并发性能。原创 2024-09-29 17:10:30 · 464 阅读 · 0 评论 -
HashMap 在1.8里处理哈希冲突和性能方面的一些改进
Java 1.8 引入了对HashMap的一些重要改进,特别是在处理哈希冲突和性能方面。以下是对HashMap1.8 实现逻辑的分析。原创 2024-09-29 16:13:49 · 640 阅读 · 0 评论 -
Java dump 的流程和常用方法
在 Java 中,生成内存转储(dump)是一种诊断手段,用于在 Java 进程遇到问题(如内存泄漏、性能下降)时捕获 JVM 的运行时数据。以下是生成 Java dump 的流程和常用方法。原创 2024-09-24 09:38:06 · 1136 阅读 · 0 评论 -
如何快速定位Java那个线程那个代码CPU使用高
在 Linux 环境中,你可以通过以下步骤快速查询 Java 应用程序中哪个线程使用 CPU 较高以及对应的代码。这个过程一般包括使用一些命令行工具和 Java 提供的工具。原创 2024-09-24 09:34:24 · 1019 阅读 · 0 评论 -
Apache 的CollectionUtils各种集合操作好用的方法总结
是 Apache Commons Collections 提供的一个工具类,包含了许多静态方法,用于操作和处理集合。原创 2024-09-11 12:43:25 · 1238 阅读 · 0 评论 -
在同一个类加载器下,对同一类进行多次反射操作会共享已加载的元数据信息吗?
在同一个类加载器下,对同一类进行多次反射操作会共享已加载的元数据信息,而不会产生新的元数据信息。这是 Java 的设计特性之一,有助于节省内存并提高性能。如果你还有其他问题或需要进一步的讨论,请告诉我!原创 2024-09-03 20:15:36 · 393 阅读 · 0 评论 -
JVM 在GC 时的根对象都有那些
栈帧中的局部变量静态字段JNI 引用常量池中的引用程序计数器长时间运行的对象Thread 引用软引用和弱引用的引用队列这些根对象可帮助 GC 判断哪些对象是可达的,从而决定哪些对象可以被回收。理解根对象是优化内存使用和管理的重要一环。原创 2024-08-23 12:25:32 · 813 阅读 · 1 评论 -
JVM 方法区存放那些内容
类结构信息字段信息方法信息方法的常量池静态变量运行时常量池。原创 2024-08-23 12:16:49 · 1024 阅读 · 0 评论 -
Java的Math.abs()返回的一定都是非负数吗?
在使用Math.abs()时,除非处理Integer.MIN_VALUE或Long.MIN_VALUE,返回的绝对值通常是非负的,其他都是非负数。原创 2024-08-23 12:09:53 · 555 阅读 · 0 评论 -
PDF 转Word 开源库
是一个开源的 Java 库,用于创建和操作 PDF 文档。虽然 PDFBox 本身没有直接支持 PDF 转 Word 的功能,但它可以提取 PDF 内容,你可以结合其他方法将这些内容写入 Word。你可以使用 PDFBox 提取文本,然后使用 Apache POI 库将其写入 Word 文档。原创 2024-08-17 22:21:05 · 1302 阅读 · 0 评论 -
Java 图片转PDF的开源库
Flying Saucer 是一个用于将 XHTML 和 CSS 渲染为 PDF 的库。Apache PDFBox 是一个开源库,用于创建和操作 PDF 文档。如果使用 Maven,可以在。原创 2024-08-17 21:31:15 · 613 阅读 · 0 评论 -
Spring中的BeanFactoryAware
通过使用BeanFactoryAware接口,你可以在 bean 初始化时获取到BeanFactory实例,从而实现更灵活的 bean 管理和依赖注入。原创 2024-08-13 12:59:42 · 1184 阅读 · 0 评论 -
Spring 中的InitializingBean
这个接口定义了一个方法afterPropertiesSet(),当 bean 的所有属性被设置后(即依赖注入完成后),Spring 容器会调用这个方法。通过实现这个接口,你可以在 bean 初始化完成后执行自定义的初始化操作。原创 2024-08-08 13:13:00 · 988 阅读 · 0 评论 -
Java “多重捕获”(multi-catch)语法
在 Java 中,是一种用于异常处理的“多重捕获”(multi-catch)语法。它允许你在一个catch块中同时捕获多个异常类型,从而简化代码,避免重复的异常处理逻辑。原创 2024-08-06 12:34:23 · 603 阅读 · 0 评论 -
Excel 最大行数
Excel 是一种广泛使用的电子表格软件,不同版本的 Excel 对于行数和列数有不同的限制。以下是各版本 Excel 中最大行数的详细信息:1. Excel 2003 及更早版本2. Excel 2007 及更高版本(包括 Excel 2010、2013、2016、2019 和 Microsoft 365)原创 2024-08-06 08:51:37 · 7427 阅读 · 0 评论 -
Young GC时大量对象进入老年代对GC时间的影响
Young GC时大量对象进入老年代会增加GC时间,尤其是在随后的老年代GC中。这种情况会导致更频繁的Major GC或Full GC,从而影响应用的性能。为了减轻这种影响,可以通过调整JVM参数和GC算法配置来优化GC性能,同时改进应用程序的内存使用策略,以减少不必要的对象晋升。原创 2024-06-13 13:07:37 · 506 阅读 · 0 评论 -
Java 集合中获取数据的前驱和后继元素
在 Java 中,如果需要获取某个数据的下一个或上一个数据,可以使用实现了 NavigableSet 或 NavigableMap 接口的集合,如 TreeSet 和 TreeMap,或者其线程安全的版本 ConcurrentSkipListSet 和 ConcurrentSkipListMap。对于实现了 List 接口的集合,可以通过 ListIterator 来获取前后元素。选择合适的集合取决于数据的类型、集合的排序需求以及是否需要线程安全。原创 2024-04-29 12:57:27 · 661 阅读 · 1 评论 -
Java各种List实现类以及特点
Java中的List接口有多种实现,每种实现都有其特定的特性和用途。ArrayList和Vector提供了基于数组的列表,其中Vector是线程安全的。LinkedList提供了基于链表的操作,适合频繁的插入和删除操作。Stack是Vector的一个子类,提供了堆栈的操作,但现在通常推荐使用Deque接口的实现。CopyOnWriteArrayList是一种线程安全的List实现,适用于读多写少的并发场景。原创 2024-04-29 12:49:39 · 1035 阅读 · 0 评论 -
Java各种Set实现类以及特点
Java中的Set接口有多种实现,每种实现都有其特定的用途和特性。选择合适的Set实现取决于应用程序的需求,比如是否需要保持插入顺序、是否需要排序、线程安全以及性能等因素。原创 2024-04-29 12:46:27 · 502 阅读 · 2 评论 -
Java各种Map实现类以及特点
Java中的Map接口有多种实现,每种实现都有其特定的用例和特性。选择合适的Map实现取决于应用程序的需求,如顺序要求、线程安全、键的生命周期等因素。原创 2024-04-29 12:41:58 · 693 阅读 · 1 评论 -
线程池与垃圾回收(GC)
总之,只有当线程池不再被引用,且内部线程都已经停止或完成了任务,线程池对象才会成为垃圾回收的目标。正确管理线程池的生命周期是防止资源泄露和内存溢出的关键。为了使线程池对象成为垃圾回收的候选对象,应当在不再需要线程池时正确关闭它。如果线程池对象不再被引用,且内部线程都已经停止,垃圾回收器在其下一次运行时将会考虑回收线程池对象。只要线程池对象被应用程序所引用,并且它内部的工作线程还在运行或等待任务,它就不会被垃圾回收器回收。这些方法会启动线程池的关闭序列,停止接收新任务,并尝试终止正在执行的任务。原创 2024-04-09 12:52:18 · 792 阅读 · 0 评论 -
逃逸分析(Escape Analysis)
逃逸分析是一种编译器优化技术,用于确定在程序中对象的作用域和生命周期。编译器通过这种分析可以决定是否可以将对象分配在栈上,而不是在堆上。如果一个对象在定义它的方法之外不可访问,即它不会“逃逸”出方法的范围,那么它可能是一个栈上分配的候选者。逃逸分析的目的是减少内存分配开销、减少垃圾回收的压力,以及提高程序的性能。原创 2024-04-06 09:43:33 · 801 阅读 · 0 评论 -
Java HashMap类各种方法的使用说明
Java中的HashMap类实现了Map接口,提供了键值对映射的存储结构。这使得数据的存取可以通过键(Key)来高效地进行。HashMap位于java.util包中。以下是HashMap。原创 2024-04-06 08:59:42 · 931 阅读 · 0 评论 -
Java List类各种方法的使用说明
Java中的List接口是一个有序的集合,允许我们动态地插入和访问元素。List接口在java.util包中,它有多个实现类,如ArrayListLinkedList等。以下是List。原创 2024-04-06 08:57:20 · 811 阅读 · 0 评论 -
AspectJ 的 5 大通知类型
总结起来,AspectJ 的通知方法参数需要根据切点表达式的需要来指定,不能随意选择参数。这样做是为了确保通知能够正确地织入到目标方法,并访问到所需的数据。在这些示例中,通知方法的参数与目标方法的参数、返回值或异常对象相关联,并且通过切点表达式来指定要绑定的参数。原创 2024-04-04 08:33:13 · 301 阅读 · 0 评论 -
Java Collections.sort 多字段排序的现代实现
这种方式的代码更加简洁和现代,利用了Java 8引入的lambda表达式和方法引用,使得代码更加易于阅读和维护。此外,它也避免了创建匿名内部类的需要。方法添加了一个基于用户年龄的排序规则。这样,我们就创建了一个排序规则链,它首先按照姓名排序,如果姓名相同,则按照年龄排序。方法来创建一个基于用户姓名的Comparator,然后通过。在这个示例中,我们使用了。原创 2024-04-01 12:39:21 · 642 阅读 · 0 评论 -
主进程和子进程的概念
主进程是创建其他进程(子进程)的进程。在操作系统中,主进程通常是启动应用程序的初始进程。原创 2024-03-15 12:55:55 · 1168 阅读 · 0 评论 -
Java 服务里调用命令行进行其他操作的几种实现方式对比
总的来说,如果需要一个稳定且功能丰富的库,推荐使用Apache Commons Exec;如果需要快速开发和简洁的API,推荐使用ZT-Exec。对于不需要额外依赖的简单场景,或者需要细粒度控制的场合,ProcessBuilder是一个不错的内置选项。原创 2024-03-15 12:50:29 · 568 阅读 · 0 评论 -
JVM运行时数据区概述以及分别存放的内容
JVM的运行时数据区是JVM在执行Java程序时用于存储数据和状态信息的内存区域。它分为多个部分,每个部分都有其特定的作用和存放的内容。原创 2024-03-10 20:09:16 · 632 阅读 · 0 评论 -
Java 并非所有的对象都放在堆中
尽管存在上述特殊情况,但是在日常的Java应用开发中,大部分对象的生命周期管理和存储都是在堆内存中进行的。在Java中,字符串字面量和其他常量值(如数值、类和接口的引用)会在编译期间被存储在类文件的常量池中。:使用Java本地接口(JNI)技术创建的对象,可能会在Java堆外分配内存,这些对象的生命周期由开发者直接管理,而不是由JVM的垃圾回收器管理。:在某些情况下,如JVM的逃逸分析确定某个对象的作用域不会逃逸出方法之外,那么这个对象可能会被优化为栈上分配,存储在Java栈的局部变量表中。原创 2024-03-10 20:08:59 · 966 阅读 · 1 评论 -
JVM(Java虚拟机)概述
JVM(Java Virtual Machine)是一个能够运行Java字节码的虚拟计算机。它是Java平台的核心组成部分,负责执行编译后的Java程序,提供跨平台运行的能力。JVM使得Java程序可以在任何安装了JVM的操作系统上运行,无需对代码进行修改,实现了"一次编写,到处运行"(Write Once, Run Anywhere)的理念。原创 2024-03-10 19:52:04 · 916 阅读 · 0 评论 -
JVM的各种垃圾回收器(GC)
Serial GC 是用于单线程环境的垃圾回收器,它使用复制算法(Copy)进行年轻代的垃圾回收,而老年代则使用标记-整理(Mark-Compact)算法。Parallel GC(也称为Throughput Collector)是一个并行的垃圾回收器,它在年轻代使用复制算法,在老年代使用标记-整理算法。Shenandoah GC是另一种低暂停时间的垃圾回收器,它与ZGC类似,旨在减少暂停时间,而不是提高吞吐量。ZGC是一种可伸缩的低延迟垃圾回收器,它主要针对大堆内存的系统,并且能够处理数TB级别的堆内存。原创 2024-03-07 12:47:04 · 573 阅读 · 0 评论 -
运行时常量池与栈中的本地变量表的区别
总结来说,运行时常量池和栈中的本地变量表是Java虚拟机中不同的内存区域,它们有着不同的生命周期、存储内容和用途。运行时常量池是类的属性和方法的静态存储区,而本地变量表是方法执行的动态存储区。原创 2024-03-07 12:16:19 · 238 阅读 · 0 评论