![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 72
Java 垃圾回收
ambition_forever
闲谈莫论人非
展开
-
JVM内存溢出
1、堆溢出绝大部分的内存溢出属于堆溢出,原因是大量对象占用了堆空间,而这些对象持有强引用,无法回收。-Xmx参数指定堆空间大小小于对象大小时候,溢出自然而然的就发生了。 报错信息:java.lang.OutOfMemoryError: Java heap space 为了减少堆溢出错误,一方面可以使用-Xmx指定一个更大的堆空间。另外可以通过MAT或者VisualVM等工具,找到大量占用堆空间的对象,并在代码上合理优化。2、直接内存溢出在Ja...原创 2022-01-16 17:45:00 · 4049 阅读 · 0 评论 -
Java-Lock锁
1、JDK1.5以后,Java提供了Lock同步锁,相对与需要JVM隐士获取和释放锁Synchronized 同步锁,Lock同步锁需要显示获取和释放锁,这就为获取和释放锁提供了更多的灵活性。2、Lock锁的基本操作通过乐观锁来实现,但是由于Lock锁也会在阻塞的时候被挂起,因此它依然属于悲观锁。对比Synchronized和Lock如下图 Synchronized Lock 实现方式 ...原创 2022-01-10 02:30:00 · 2295 阅读 · 0 评论 -
Synchronized
1、JVM在JDK1.6中引入了分级锁机制来优化Synchronized,一个线程获取锁的时候,首先对象锁将成为一个偏向锁,这样做是为了优化同一线程重复获取锁导致的用户态和内核态的切换问题,其次如果有多个线程竞争锁资源,锁将升级为轻量级锁,轻量级锁适用与在短时间内持有锁,且锁有交替切换的场景,轻量级锁使用了自旋锁来避免线程用户态和内核态的频繁切换,提高了系统性能,如果竞争激烈的化,同步锁会升级为重量级锁。2、减少锁竞争,减小锁粒度,减少锁的持有时间,Synchronized同步锁在自旋时...原创 2022-01-09 16:19:47 · 376 阅读 · 0 评论 -
OOM 如何排查
1、启动的时候加上-XX:+HeapDumpOnOutOfMemoryError以上为本地idea配置启动参数 设置堆最大128m,并且设置如果发生oom的化,打印自动打印进程快照通过上述配置然后执行如下代码后的控制台结果public static void main(String[] args) throws InterruptedException { Map<Integer, byte[]> map = new HashMap<>()..原创 2021-12-07 23:28:18 · 1423 阅读 · 0 评论