![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 90
豆奶快攻
这个作者很懒,什么都没留下…
展开
-
JVM基础与相关案例
我使用 jmap 命令,导出了一份线上堆栈,然后使用 MAT 进行分析,通过对 GC Roots 的分析,发现了一个非常大的 HashMap 对象,这个原本是其他同事做缓存用的,但是做了一个无界缓存,没有设置超时时间或者 LRU 策略,在使用上又没有重写key类对象的hashcode和equals方法,对象无法取出也直接造成了堆内存占用一直上升,后来,将这个缓存改成 guava 的 Cache,并设置了弱引用,故障就消失了。第三,由于缓存的使用,有大量的弱引用,拿一次长达 10 秒的 GC 来说。原创 2024-07-17 00:01:42 · 589 阅读 · 0 评论 -
JVM运行期的几种优化手段
在之前的文章中我们谈到过,相比 C/C++ 语言,Java 语言在运行效率方面要稍逊一些,因为 Java 应用程序是在虚拟机上运行,而 C/C++ 程序是直接编译成平台相应的机器码来运行程序。从虚拟机对外发布开始,开发团队一直在努力试图缩小 Java 与 C/C++ 语言在运行效率上的差距。从实际的结果来看,确实成果显著。本文就来聊聊 HotSpot 虚拟机为了提升 Java 程序的执行效率,都实现了哪些激动人心的优化技术。转载 2024-07-12 21:23:44 · 8 阅读 · 0 评论 -
多线程基础
并且这种循环是链表的循环,相当于 A 节点指向 B 节点,B 节点又指回到 A 节点,这样一来,在下一次想要获取该 key 所对应的 value 的时候,便会在遍历链表的时候发生永远无法遍历结束的情况,也就发生 CPU 100% 的情况。如果需要同步的操作执行速度非常快,并且线程竞争并不激烈,这时候使用cas效率会更高,因为加锁会导致线程的上下文切换,如果上下文切换的耗时比同步操作本身更耗时,且线程对资源的竞争不激烈,使用volatiled+cas操作会是非常高效的选择;乐观锁体现的是悲观锁的反面。原创 2024-07-02 17:17:59 · 823 阅读 · 0 评论 -
工作中最常见的OOM问题
我们在写递归代码时,一定要考虑递归深度。很多时候,excel一次导出大量的数据,获取在程序中一次性查询的数据太多,都可能会出现这种OOM问题。如果实际工作中,出现这个问题,一般是由于创建的线程太多,或者设置的单个线程占用内存空间太大导致的。调用,如果递归的深度超过了JVM允许的最大深度,可能会出现栈内存溢出问题。是由于JVM在GC时,对象过多,导致内存溢出,建议调整GC的策略。有时候,我们的业务系统创建了太多的线程,可能会导致栈内存OOM。这个问题一般是由于加载到内存中的类太多,或者类的体积太大导致的。原创 2024-06-24 19:51:10 · 813 阅读 · 0 评论