java
文章平均质量分 77
四美
这个作者很懒,什么都没留下…
展开
-
JVM 内存分析工具MAT
遇到的问题服务器CPU飙高,高CPU线程卡死在GC下载地址:https://www.eclipse.org/mat/downloads.php从官网下载单机版MAT工具,解压后直接运行MAT目录的MemoryAnalyzer.exe即可启动MAT我这里下载的是1.10,更高版本需要使用jdk 11MAT an internal error occurred during:"Parsing heap dump" from问题待分析的dump文件过大,可增大安装目录下MemoryAnalyze原创 2022-01-07 23:09:12 · 684 阅读 · 0 评论 -
AQS解析
Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQS。由于篇幅原因,本篇文章主要阐述AQS中独占锁的逻辑和Sync Que转载 2021-06-23 21:34:53 · 308 阅读 · 0 评论 -
threadlocal
应用场景Spring采用Threadlocal的方式,来保证单个线程中的数据库操作使用的是同一个数据库连接,同时,采用这种方式可以使业务层使用事务时不需要感知并管理connection对象,通过传播级别,巧妙地管理多个事务配置之间的切换,挂起和恢复,org.springframework.transaction.support.TransactionSynchronizationManagerprivate static final ThreadLocal<Map<Object, Objec原创 2021-05-31 16:35:59 · 159 阅读 · 0 评论 -
JVM
JDK1.8 JVM运行时数据区域划分1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。另外,为了线程切换后能恢复到正确的执行转载 2021-04-05 20:05:33 · 78 阅读 · 0 评论 -
线程池
使用线程池的好处池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线转载 2021-04-04 23:13:07 · 98 阅读 · 0 评论 -
并发容器总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NKrRJwH9-1617548177210)(https://z3.ax1x.com/2021/04/04/cuN9w4.png)]JDK 提供的这些容器大部分在 java.util.concurrent 包中。非阻塞队列ConcurrentHashMap: 线程安全的 HashMapCopyOnWriteArrayList: 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector.Concurre原创 2021-04-04 22:56:34 · 112 阅读 · 0 评论