
Java
文章平均质量分 62
Java 相关
龙大.
初心未改,方得始终!
展开
-
Cookie 和Session的区别
特性CookieSession存储位置客户端(浏览器)服务器存储大小通常限制为 4KB相对较大过期机制可设置过期时间,浏览器关闭后消失(会话 Cookie)定期过期,通常基于时间或用户行为安全性安全性较低,容易被用户篡改更安全,客户端无直接访问权限访问速度访问速度快(在客户端)访问可能稍慢(因需访问服务器内存)用途状态保持和用户偏好存储用户数据和重要的会话信息。原创 2024-12-13 12:46:33 · 350 阅读 · 0 评论 -
一些流行的 Java HTTP 客户端库的优缺点对比
选择适合的 Java HTTP 客户端库取决于具体的应用场景、项目需求和团队的技术栈。如果希望有更高的性能和丰富功能,可以选择 Apache HttpClient 或 OkHttp;若在 Spring 环境中,可以使用 RestTemplate;对于简单请求,可以考虑用 Unirest 或 Java 11 HttpClient。Retrofit 在处理 RESTful API 时非常方便,特别适合 Android 开发。原创 2024-10-12 08:28:43 · 785 阅读 · 0 评论 -
ConcurrentHashMap 的一些总结
通过分段锁(Java 1.7 及之前)和细粒度锁(Java 1.8 及之后)实现了线程安全,同时结合了 CAS 操作和无锁读取,极大地提高了并发性能。原创 2024-09-29 17:10:30 · 440 阅读 · 0 评论 -
HashMap 在1.8里处理哈希冲突和性能方面的一些改进
Java 1.8 引入了对HashMap的一些重要改进,特别是在处理哈希冲突和性能方面。以下是对HashMap1.8 实现逻辑的分析。原创 2024-09-29 16:13:49 · 618 阅读 · 0 评论 -
Java dump 的流程和常用方法
在 Java 中,生成内存转储(dump)是一种诊断手段,用于在 Java 进程遇到问题(如内存泄漏、性能下降)时捕获 JVM 的运行时数据。以下是生成 Java dump 的流程和常用方法。原创 2024-09-24 09:38:06 · 978 阅读 · 0 评论 -
如何快速定位Java那个线程那个代码CPU使用高
在 Linux 环境中,你可以通过以下步骤快速查询 Java 应用程序中哪个线程使用 CPU 较高以及对应的代码。这个过程一般包括使用一些命令行工具和 Java 提供的工具。原创 2024-09-24 09:34:24 · 913 阅读 · 0 评论 -
Apache 的CollectionUtils各种集合操作好用的方法总结
是 Apache Commons Collections 提供的一个工具类,包含了许多静态方法,用于操作和处理集合。原创 2024-09-11 12:43:25 · 1113 阅读 · 0 评论 -
在同一个类加载器下,对同一类进行多次反射操作会共享已加载的元数据信息吗?
在同一个类加载器下,对同一类进行多次反射操作会共享已加载的元数据信息,而不会产生新的元数据信息。这是 Java 的设计特性之一,有助于节省内存并提高性能。如果你还有其他问题或需要进一步的讨论,请告诉我!原创 2024-09-03 20:15:36 · 368 阅读 · 0 评论 -
JVM 在GC 时的根对象都有那些
栈帧中的局部变量静态字段JNI 引用常量池中的引用程序计数器长时间运行的对象Thread 引用软引用和弱引用的引用队列这些根对象可帮助 GC 判断哪些对象是可达的,从而决定哪些对象可以被回收。理解根对象是优化内存使用和管理的重要一环。原创 2024-08-23 12:25:32 · 692 阅读 · 1 评论 -
JVM 方法区存放那些内容
类结构信息字段信息方法信息方法的常量池静态变量运行时常量池。原创 2024-08-23 12:16:49 · 887 阅读 · 0 评论 -
Java的Math.abs()返回的一定都是非负数吗?
在使用Math.abs()时,除非处理Integer.MIN_VALUE或Long.MIN_VALUE,返回的绝对值通常是非负的,其他都是非负数。原创 2024-08-23 12:09:53 · 494 阅读 · 0 评论 -
PDF 转Word 开源库
是一个开源的 Java 库,用于创建和操作 PDF 文档。虽然 PDFBox 本身没有直接支持 PDF 转 Word 的功能,但它可以提取 PDF 内容,你可以结合其他方法将这些内容写入 Word。你可以使用 PDFBox 提取文本,然后使用 Apache POI 库将其写入 Word 文档。原创 2024-08-17 22:21:05 · 1141 阅读 · 0 评论 -
Java 图片转PDF的开源库
Flying Saucer 是一个用于将 XHTML 和 CSS 渲染为 PDF 的库。Apache PDFBox 是一个开源库,用于创建和操作 PDF 文档。如果使用 Maven,可以在。原创 2024-08-17 21:31:15 · 541 阅读 · 0 评论 -
Spring中的BeanFactoryAware
通过使用BeanFactoryAware接口,你可以在 bean 初始化时获取到BeanFactory实例,从而实现更灵活的 bean 管理和依赖注入。原创 2024-08-13 12:59:42 · 1143 阅读 · 0 评论 -
Spring 中的InitializingBean
这个接口定义了一个方法afterPropertiesSet(),当 bean 的所有属性被设置后(即依赖注入完成后),Spring 容器会调用这个方法。通过实现这个接口,你可以在 bean 初始化完成后执行自定义的初始化操作。原创 2024-08-08 13:13:00 · 867 阅读 · 0 评论 -
Java “多重捕获”(multi-catch)语法
在 Java 中,是一种用于异常处理的“多重捕获”(multi-catch)语法。它允许你在一个catch块中同时捕获多个异常类型,从而简化代码,避免重复的异常处理逻辑。原创 2024-08-06 12:34:23 · 529 阅读 · 0 评论 -
Excel 最大行数
Excel 是一种广泛使用的电子表格软件,不同版本的 Excel 对于行数和列数有不同的限制。以下是各版本 Excel 中最大行数的详细信息:1. Excel 2003 及更早版本2. Excel 2007 及更高版本(包括 Excel 2010、2013、2016、2019 和 Microsoft 365)原创 2024-08-06 08:51:37 · 5765 阅读 · 0 评论 -
Young GC时大量对象进入老年代对GC时间的影响
Young GC时大量对象进入老年代会增加GC时间,尤其是在随后的老年代GC中。这种情况会导致更频繁的Major GC或Full GC,从而影响应用的性能。为了减轻这种影响,可以通过调整JVM参数和GC算法配置来优化GC性能,同时改进应用程序的内存使用策略,以减少不必要的对象晋升。原创 2024-06-13 13:07:37 · 432 阅读 · 0 评论 -
Java 集合中获取数据的前驱和后继元素
在 Java 中,如果需要获取某个数据的下一个或上一个数据,可以使用实现了 NavigableSet 或 NavigableMap 接口的集合,如 TreeSet 和 TreeMap,或者其线程安全的版本 ConcurrentSkipListSet 和 ConcurrentSkipListMap。对于实现了 List 接口的集合,可以通过 ListIterator 来获取前后元素。选择合适的集合取决于数据的类型、集合的排序需求以及是否需要线程安全。原创 2024-04-29 12:57:27 · 629 阅读 · 1 评论 -
Java各种List实现类以及特点
Java中的List接口有多种实现,每种实现都有其特定的特性和用途。ArrayList和Vector提供了基于数组的列表,其中Vector是线程安全的。LinkedList提供了基于链表的操作,适合频繁的插入和删除操作。Stack是Vector的一个子类,提供了堆栈的操作,但现在通常推荐使用Deque接口的实现。CopyOnWriteArrayList是一种线程安全的List实现,适用于读多写少的并发场景。原创 2024-04-29 12:49:39 · 995 阅读 · 0 评论 -
Java各种Set实现类以及特点
Java中的Set接口有多种实现,每种实现都有其特定的用途和特性。选择合适的Set实现取决于应用程序的需求,比如是否需要保持插入顺序、是否需要排序、线程安全以及性能等因素。原创 2024-04-29 12:46:27 · 466 阅读 · 2 评论 -
Java各种Map实现类以及特点
Java中的Map接口有多种实现,每种实现都有其特定的用例和特性。选择合适的Map实现取决于应用程序的需求,如顺序要求、线程安全、键的生命周期等因素。原创 2024-04-29 12:41:58 · 620 阅读 · 1 评论 -
线程池与垃圾回收(GC)
总之,只有当线程池不再被引用,且内部线程都已经停止或完成了任务,线程池对象才会成为垃圾回收的目标。正确管理线程池的生命周期是防止资源泄露和内存溢出的关键。为了使线程池对象成为垃圾回收的候选对象,应当在不再需要线程池时正确关闭它。如果线程池对象不再被引用,且内部线程都已经停止,垃圾回收器在其下一次运行时将会考虑回收线程池对象。只要线程池对象被应用程序所引用,并且它内部的工作线程还在运行或等待任务,它就不会被垃圾回收器回收。这些方法会启动线程池的关闭序列,停止接收新任务,并尝试终止正在执行的任务。原创 2024-04-09 12:52:18 · 711 阅读 · 0 评论 -
逃逸分析(Escape Analysis)
逃逸分析是一种编译器优化技术,用于确定在程序中对象的作用域和生命周期。编译器通过这种分析可以决定是否可以将对象分配在栈上,而不是在堆上。如果一个对象在定义它的方法之外不可访问,即它不会“逃逸”出方法的范围,那么它可能是一个栈上分配的候选者。逃逸分析的目的是减少内存分配开销、减少垃圾回收的压力,以及提高程序的性能。原创 2024-04-06 09:43:33 · 738 阅读 · 0 评论 -
Java HashMap类各种方法的使用说明
Java中的HashMap类实现了Map接口,提供了键值对映射的存储结构。这使得数据的存取可以通过键(Key)来高效地进行。HashMap位于java.util包中。以下是HashMap。原创 2024-04-06 08:59:42 · 849 阅读 · 0 评论 -
Java List类各种方法的使用说明
Java中的List接口是一个有序的集合,允许我们动态地插入和访问元素。List接口在java.util包中,它有多个实现类,如ArrayListLinkedList等。以下是List。原创 2024-04-06 08:57:20 · 695 阅读 · 0 评论 -
AspectJ 的 5 大通知类型
总结起来,AspectJ 的通知方法参数需要根据切点表达式的需要来指定,不能随意选择参数。这样做是为了确保通知能够正确地织入到目标方法,并访问到所需的数据。在这些示例中,通知方法的参数与目标方法的参数、返回值或异常对象相关联,并且通过切点表达式来指定要绑定的参数。原创 2024-04-04 08:33:13 · 271 阅读 · 0 评论 -
Java Collections.sort 多字段排序的现代实现
这种方式的代码更加简洁和现代,利用了Java 8引入的lambda表达式和方法引用,使得代码更加易于阅读和维护。此外,它也避免了创建匿名内部类的需要。方法添加了一个基于用户年龄的排序规则。这样,我们就创建了一个排序规则链,它首先按照姓名排序,如果姓名相同,则按照年龄排序。方法来创建一个基于用户姓名的Comparator,然后通过。在这个示例中,我们使用了。原创 2024-04-01 12:39:21 · 567 阅读 · 0 评论 -
主进程和子进程的概念
主进程是创建其他进程(子进程)的进程。在操作系统中,主进程通常是启动应用程序的初始进程。原创 2024-03-15 12:55:55 · 1033 阅读 · 0 评论 -
Java 服务里调用命令行进行其他操作的几种实现方式对比
总的来说,如果需要一个稳定且功能丰富的库,推荐使用Apache Commons Exec;如果需要快速开发和简洁的API,推荐使用ZT-Exec。对于不需要额外依赖的简单场景,或者需要细粒度控制的场合,ProcessBuilder是一个不错的内置选项。原创 2024-03-15 12:50:29 · 513 阅读 · 0 评论 -
JVM运行时数据区概述以及分别存放的内容
JVM的运行时数据区是JVM在执行Java程序时用于存储数据和状态信息的内存区域。它分为多个部分,每个部分都有其特定的作用和存放的内容。原创 2024-03-10 20:09:16 · 583 阅读 · 0 评论 -
Java 并非所有的对象都放在堆中
尽管存在上述特殊情况,但是在日常的Java应用开发中,大部分对象的生命周期管理和存储都是在堆内存中进行的。在Java中,字符串字面量和其他常量值(如数值、类和接口的引用)会在编译期间被存储在类文件的常量池中。:使用Java本地接口(JNI)技术创建的对象,可能会在Java堆外分配内存,这些对象的生命周期由开发者直接管理,而不是由JVM的垃圾回收器管理。:在某些情况下,如JVM的逃逸分析确定某个对象的作用域不会逃逸出方法之外,那么这个对象可能会被优化为栈上分配,存储在Java栈的局部变量表中。原创 2024-03-10 20:08:59 · 912 阅读 · 1 评论 -
JVM(Java虚拟机)概述
JVM(Java Virtual Machine)是一个能够运行Java字节码的虚拟计算机。它是Java平台的核心组成部分,负责执行编译后的Java程序,提供跨平台运行的能力。JVM使得Java程序可以在任何安装了JVM的操作系统上运行,无需对代码进行修改,实现了"一次编写,到处运行"(Write Once, Run Anywhere)的理念。原创 2024-03-10 19:52:04 · 891 阅读 · 0 评论 -
JVM的各种垃圾回收器(GC)
Serial GC 是用于单线程环境的垃圾回收器,它使用复制算法(Copy)进行年轻代的垃圾回收,而老年代则使用标记-整理(Mark-Compact)算法。Parallel GC(也称为Throughput Collector)是一个并行的垃圾回收器,它在年轻代使用复制算法,在老年代使用标记-整理算法。Shenandoah GC是另一种低暂停时间的垃圾回收器,它与ZGC类似,旨在减少暂停时间,而不是提高吞吐量。ZGC是一种可伸缩的低延迟垃圾回收器,它主要针对大堆内存的系统,并且能够处理数TB级别的堆内存。原创 2024-03-07 12:47:04 · 549 阅读 · 0 评论 -
运行时常量池与栈中的本地变量表的区别
总结来说,运行时常量池和栈中的本地变量表是Java虚拟机中不同的内存区域,它们有着不同的生命周期、存储内容和用途。运行时常量池是类的属性和方法的静态存储区,而本地变量表是方法执行的动态存储区。原创 2024-03-07 12:16:19 · 225 阅读 · 0 评论 -
什么是符号引用?
符号引用是Java虚拟机(JVM)在处理类文件时使用的一种抽象表示,它允许JVM在不同阶段通过解析来动态地定位具体的类成员,这是支持Java动态性(如反射、动态类加载)的关键机制之一。原创 2024-03-07 12:15:17 · 775 阅读 · 0 评论 -
Java虚拟机(JVM)元数据区存放的内容
在Java 8之前,类的元数据信息是存放在永久代(PermGen)中的,但从Java 8开始,永久代被移除,取而代之的是元数据区(Metaspace)。运行时常量池是每个类或接口的常量池表的运行时表示形式,包含了若干种不同的常量,从编译期生成的字面量到方法和字段的引用,这些都会在类加载后进入元数据区的运行时常量池。类的静态变量也被存放在元数据区,因为它们是与类相关的,而不是与类的某个特定实例相关的。此外,元数据区可能还包含了类的加载器信息、类的结构信息、数组信息等。原创 2024-03-06 12:56:24 · 1328 阅读 · 0 评论 -
Java 的Executors的默认创建线程池的方法原理及使用场景、优缺点
Java中的线程池是通过Executor框架实现的,Executor框架位于java.util.concurrent包下。线程池的核心是ThreadPoolExecutor类,而Executors类提供的工厂方法都是对ThreadPoolExecutor的封装。原创 2024-03-03 15:35:30 · 1262 阅读 · 0 评论 -
HashMap在多线程下形成环的死锁详解
如果另一个线程尝试访问这个已经形成闭环的链表,它将无法成功完成操作,因为它会不断地遍历相同的节点,这就是所谓的死循环。在多线程环境下,HashMap由于没有内置的同步机制,可能会在并发修改时出现链表环,导致死循环和死锁。它存储键值对,并允许使用null键和null值。在扩容过程中,如果两个线程同时进行,由于没有适当的锁机制,它们可能会相互干扰对链表结构的修改。当多个线程同时对HashMap进行写操作时,可能会触发resize操作(即扩容),这个过程涉及到重新计算元素在数组中的位置并重新链接旧链表中的元素。原创 2024-03-01 23:16:38 · 837 阅读 · 0 评论 -
Java 中notify 和 notifyAll 方法介绍
notify() 方法是 Java 中 Object 类的一个方法,它用来唤醒在该对象的监视器(monitor)上等待的单个线程。如果有多个线程都在该对象上等待,则会随机唤醒其中一个线程。被唤醒的线程将会尝试重新获取对象锁,并继续执行原创 2024-03-01 22:59:54 · 1326 阅读 · 0 评论