![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础
文章平均质量分 84
yarnecn
这个作者很懒,什么都没留下…
展开
-
Java中为什么hashMap要强制size为2的n次方
如果hashMap不强制size为2的n次方,那么随着size的不同出现的碰撞分布为:import java.util.HashMap;import java.util.Map;public class TestHashCrash { public static void main(String[] args) { for (int i = 1; i <= 32; i++) { System.out.println("size为" + i + "原创 2022-02-11 00:57:28 · 315 阅读 · 0 评论 -
linux中Swap分区是做什么的?
文章目录内存分段物理内存虚拟内存内存碎片的出现Swap交换区内存分页有了内存之后的SwapSwap区的弊端总结 我们在操作服务器的时候,一般会用top命令查看整体系统资源,top命令除了CPU,内存以及任务运行情况等,在内存的显示信息下边还有一行信息,就是Swap,它跟内存的表示方法一样,以总量,空闲,使用大小来表示当前的占用情况,那它到底是什么呢,跟内存有什么区别么? swap用英文表示是交换的意思,简单说Swap区就是服务器上的交换区,这块区域其实是硬盘,并不是内存,首先它的用法肯定是用来做交换原创 2021-11-06 11:56:56 · 3772 阅读 · 1 评论 -
从ReentrantLock的实现了解AQS(下)
文章目录锁状态存储StateexclusiveOwnerThread线程队列队列节点队列操作方法hasQueuedPredecessors()acquire(核心)拿锁安排入队睡眠入队二次确认是否进入睡眠发现可以拿锁发现确实没希望确认前辈睡了我也休息了总结上节在讨论ReentrantLock的过程中,我们遇到了几个在AQS中实现的方法,比如AQS的核心逻辑实现acquire、判断是否有前辈的方法hasQueuedPredecessors、尝试占锁的方法compareAndSetState、拿到锁之后设置锁原创 2021-10-17 02:37:15 · 148 阅读 · 0 评论 -
从ReentrantLock的实现了解AQS(上)
文章目录ReentrantLock内部结构SyncFairSync1. 无等待或优先才给机会尝试2. 递归调用NonfairSync1. 立即尝试2. 再次尝试3. 递归调用NonfairSync vs FairSync ?疑问解答之前文章很多次提到了AQS,AQS全名是AbstractQueuedSynchronizer,它是java.util.concurrent.locks包下的一个抽象类,和它的包名一样,AQS主要的作用就是用来实现锁,它跟synchronized的区别是,synchroniz原创 2021-10-16 00:23:37 · 116 阅读 · 0 评论 -
Nginx报错(104:Connection reset by peer)问题解决以及分析
文章目录问题解决应用部署环境现象解决过程最终解决问题分析连接重置TCP RST其他情况的RSTTomcat 的 ConnectorNginx 104类似问题解决思路总结问题解决应用部署环境语言:java框架:ssmweb容器:tomcat负载:nginx外层代理:F5现象根据客户需求对接一个停车缴费的功能,发布到生产环境之后发现,少量账单同时支付没有问题,一旦同时支付的账单数量超过某个值,就会出现网路连接问题,稳定复现。解决过程首先查看了应用的日志,发现用户提示网络异常的时候原创 2021-09-13 23:56:32 · 14589 阅读 · 0 评论 -
synchronized其他知识
文章目录拿什么作为锁使用类实例对象作为锁使用类class对象作为锁synchronized的四种状态锁升级对象头monitor升级过程无锁偏向锁轻量级锁重量级锁释放总结上篇文章提到过,synchronized可以保证多线程之间的可见性和原子性。而且我们平时用的时候,很多时候都是直接在方法上加一个synchronized,这片文章主要介绍synchronized在使用过程中需要或者在synchronized实现上需要我们了解的一些细节以及注意事项拿什么作为锁在使用synchronized时候,有一点需要原创 2021-09-12 22:58:53 · 95 阅读 · 0 评论 -
重新再理解一次线程
文章目录线程的生命周期创建ThreadRunnable线程池创建execute+Runnablesubmit+Callable/Runnablesubmit(Runnable)submit(Runnable,Result)submit(Callable)到底有几种创建线程的方式?就绪阻塞WAITINGObject.wait`Thread.join``LockSupport.park`BLOCKEDTIMED_WAITING`Object.wait(long)``Thread.sleep(long)``Thr原创 2021-08-22 02:36:03 · 138 阅读 · 0 评论 -
几个jvm问题场景
文章目录OOM死循环内存泄漏堆内存小StackOverflowErrorCPU占用过高总结之前介绍过一些关于jvm的一些知识,包括内存结构,垃圾回收算法,垃圾回收器,这次主要是模拟一些问题场景,通过一些问题场景的分析,可以对这几部分的理解更加深刻。而且顺带可以简单的介绍一些jvm调试的命令,以及运行参数,方便我们去排查问题。OOMoom翻译过来是Out Of Memory,也就是内存溢出,Java中的报错是java.lang.OutOfMemoryError,这个应该是我们比较常见的一个问题场景了,我原创 2021-08-08 20:56:45 · 246 阅读 · 0 评论