![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能调优
y&m
这个作者很懒,什么都没留下…
展开
-
volatile关键字
简介volatile关键字保证了在多线程环境下,被修饰的变量在修改后会马上同步到主存,这样该线程对这个变量的修改就是对所有其他线程可见的,其他线程能够马上读到这个修改后的值。说明使用volatile之后,做了如下事情:1、每次修改volatile变量会立即同步到主存;2、每次读取volatile变量的值都强制从主存读取最新的值(强制JVM不可优化volatile变量,如JVM优化后变量读取会使用CPU缓存,而不从主存中读取);3、线程A写入volatile变量之前可见的变量,在线程B中读取该vo原创 2021-05-06 13:46:53 · 76 阅读 · 0 评论 -
Java虚拟机即时编译
从Java8开始,Java虚拟机默认采用分层编译方式。它将执行分为5个层次,分别为0层解释执行,1层执行没有profiling的C1代码,2层执行部分profiling的C1代码,3层执行全部profiling的C1代码和4层执行C2代码。通常情况下,方法会首先被解释执行,然后被3层的C1编译,最后被4层的C2编译。即时编译是有方法调用计数器和循环回边计数器触发的。在使用分层编译的情况下,触发编译的阈值是根据当前待编译的方法数目动态调整的。OSR是一种能够在非方法入口处进行解释执行和编译后代码之间切换原创 2021-05-06 11:44:10 · 115 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩
缓存穿透缓存穿透是指缓存和数据库中都没有的数据。用户不断发起请求,cache拦截不了,直接使用数据库查询数据,可能会对数据库性能造成影响。解决方法:1、设置key-value,value的值为null;2、将用户请求拦截在上游;缓存击穿缓存击穿是指缓存中没有但数据库有的数据(一般是缓存时间到期)。由于用户特别多,同时去读取数据,引起数据库压力瞬间增大。解决方法:1、设置热点数据不过期;2、加互斥锁;缓存雪崩缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起原创 2020-05-13 09:34:13 · 111 阅读 · 0 评论 -
tomcat使用线程池配置高并发连接
1:配置executor属性打开/conf/server.xml文件,在Connector之前配置一个线程池:<Executor name="tomcatThreadPool" namePrefix="tomcatThreadPool-" maxThreads="1000" maxIdleTime="30000...转载 2020-01-09 10:06:16 · 230 阅读 · 0 评论 -
(转载)drop、truncate和delete的区别
转载自 https://www.cnblogs.com/zhizhao/p/7825469.html(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执...转载 2019-02-26 08:52:11 · 130 阅读 · 0 评论