- 博客(28)
- 收藏
- 关注
原创 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 368
原创 linux中Swap分区是做什么的?
文章目录内存分段物理内存虚拟内存内存碎片的出现Swap交换区内存分页有了内存之后的SwapSwap区的弊端总结 我们在操作服务器的时候,一般会用top命令查看整体系统资源,top命令除了CPU,内存以及任务运行情况等,在内存的显示信息下边还有一行信息,就是Swap,它跟内存的表示方法一样,以总量,空闲,使用大小来表示当前的占用情况,那它到底是什么呢,跟内存有什么区别么? swap用英文表示是交换的意思,简单说Swap区就是服务器上的交换区,这块区域其实是硬盘,并不是内存,首先它的用法肯定是用来做交换
2021-11-06 11:56:56 4088 1
原创 从ReentrantLock的实现了解AQS(下)
文章目录锁状态存储StateexclusiveOwnerThread线程队列队列节点队列操作方法hasQueuedPredecessors()acquire(核心)拿锁安排入队睡眠入队二次确认是否进入睡眠发现可以拿锁发现确实没希望确认前辈睡了我也休息了总结上节在讨论ReentrantLock的过程中,我们遇到了几个在AQS中实现的方法,比如AQS的核心逻辑实现acquire、判断是否有前辈的方法hasQueuedPredecessors、尝试占锁的方法compareAndSetState、拿到锁之后设置锁
2021-10-17 02:37:15 319
原创 从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 279
原创 如何区分Java中那些锁
文章目录悲观锁&乐观锁悲观锁如何理解加锁?如何理解拿到锁?乐观锁CAS自旋锁优缺点自适应自旋锁读写锁独占锁、互斥锁、排他锁&共享锁可重入锁&不可重入锁不可重入锁会造成什么问题?可重入锁偏向锁、轻量级锁、重量级锁偏向锁轻量级锁重量级锁公平锁&非公平锁公平锁非公平锁实现分段锁总结锁的存在就是要保证一个资源片段在多线程的竞争处理的情况下,最终资源处理的结果是原子的。之前文章讲了synchronized的一些知识,我们了解了synchronized关键字在Java中的含义,以及内
2021-10-04 01:02:20 584
原创 Nginx报错(104:Connection reset by peer)问题解决以及分析
文章目录问题解决应用部署环境现象解决过程最终解决问题分析连接重置TCP RST其他情况的RSTTomcat 的 ConnectorNginx 104类似问题解决思路总结问题解决应用部署环境语言:java框架:ssmweb容器:tomcat负载:nginx外层代理:F5现象根据客户需求对接一个停车缴费的功能,发布到生产环境之后发现,少量账单同时支付没有问题,一旦同时支付的账单数量超过某个值,就会出现网路连接问题,稳定复现。解决过程首先查看了应用的日志,发现用户提示网络异常的时候
2021-09-13 23:56:32 15664
原创 synchronized其他知识
文章目录拿什么作为锁使用类实例对象作为锁使用类class对象作为锁synchronized的四种状态锁升级对象头monitor升级过程无锁偏向锁轻量级锁重量级锁释放总结上篇文章提到过,synchronized可以保证多线程之间的可见性和原子性。而且我们平时用的时候,很多时候都是直接在方法上加一个synchronized,这片文章主要介绍synchronized在使用过程中需要或者在synchronized实现上需要我们了解的一些细节以及注意事项拿什么作为锁在使用synchronized时候,有一点需要
2021-09-12 22:58:53 403
原创 可见性、有序性、原子性如何保证?
文章目录volatile使用理解Lock前缀sychronized使用理解加在方法上锁代码块锁进入以及锁释放Atomic使用CompareAndSweep总结上篇文章简单介绍了多线程开发会遇到的问题。现在我们知道因为JMM模型导致,线程之间的可见只能通过将线程本地内存的值更新到主内存中,然后更新其他线程里的值保证可见。但是在多线程的情况下,我们如果真的等一个线程结束之后,才能知道某个值的结果,那其实相当于线程之间的变量,就是不可见的。然后因为编译器和处理器为了提升运行效率的重排序,导致虽然单线程的结果没有
2021-09-10 00:37:18 968
原创 多线程会遇到什么问题?
文章目录为什么多线程会出现各种各样的问题?线程执行单核CPU执行造成的问题gon多核CPU执行造成的问题JMM什么是JMM造成的问题重排序重排序遵守的规则Happens-beforeas-if-serial各种级别的重排序编译器级别的重排序处理器指令级别的重排序处理器内存级别的重排序造成的问题如何解决这些问题?总结接着上篇文章,了解了一些线程的基本知识,知道了如何去使用线程,那么在多线程的环境下,我们会遇到什么问题呢?经常能遇到的JMM是啥?多线程的三大特性是啥,跟我们平时的使用有什么关系?为什么多线程
2021-08-29 23:12:18 1126
原创 重新再理解一次线程
文章目录线程的生命周期创建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 498
原创 初识K8S
文章目录引言什么是容器K8S是什么如何部署一些基础概念Pod和容器负载控制器ReplicaSetDeploymentDaemonSetStatefulSetJobCronJob服务发现namespaceServiceIngress存储资源存储ConfigMapSecret卷存储VolumePersistent VolumePersistent Volume Claim总结引言第一次听到这个名字是在两年前,当时到处都是k8s的一些文章,当时听到之后没有太大的一个概念,因为公司项目比较旧,很多时候部署都是直
2021-08-15 22:30:01 306
原创 几个jvm问题场景
文章目录OOM死循环内存泄漏堆内存小StackOverflowErrorCPU占用过高总结之前介绍过一些关于jvm的一些知识,包括内存结构,垃圾回收算法,垃圾回收器,这次主要是模拟一些问题场景,通过一些问题场景的分析,可以对这几部分的理解更加深刻。而且顺带可以简单的介绍一些jvm调试的命令,以及运行参数,方便我们去排查问题。OOMoom翻译过来是Out Of Memory,也就是内存溢出,Java中的报错是java.lang.OutOfMemoryError,这个应该是我们比较常见的一个问题场景了,我
2021-08-08 20:56:45 282
原创 简述垃圾收集器
文章目录Stop The World各种收集器介绍Serial GC必知必会ParNew GC必知必会Parallel GC必知必会CMS GC必知必会G1 GC必知必会ZGC如何选择?总结之前介绍过jvm中的垃圾算法,算法只是我们将无效对象回收的一种方式,最终将这些算法运用起来的,是垃圾收集器,随着java应用的业务场景越来越多,java在不停的版本迭代过程中,推出了很多中垃圾收集器,来应对不同的业务以及服务场景。Stop The World在介绍GC收集器之前,先介绍一个在了解GC回收过程中必要的
2021-08-01 23:11:28 399
原创 细说ThreadLocal
文章目录简介用途1. 生成线程唯一ID2. 参数传递3. Spring中的@Transaction注解使用注意事项` `内存溢出问题*弱引用是如何解决内存溢出的为什么还会有内存溢出的问题?如何处理答疑什么情况下线程会一直存在?为什么说ThreadLocal是线程安全的总结上次在jvm垃圾回收算法中有提到,Java中有强、软、弱、虚四种引用方式,这四种引用方式会影响到一个对象被回收的时机,在弱引用的部分,留了一个疑问,就是弱引用在ThreadLocal中的使用,这次主要说一下这个ThreadLocal,到底
2021-07-31 23:58:26 171
原创 jvm垃圾回收算法
文章目录引入判断对象可用算法java引用类型强引用软引用弱引用虚引用判断可用算法引用标记法可达性判断算法垃圾回收算法标记清除标记整理标记复制分带假设年轻代老年代小结总结上次在jvm内存结构介绍的时候有说过,在堆空间,分为老年代和新生代,新生代又分为Eden space,survive From,Survive to这三部分,那垃圾对象是如何在新生代和老年代进行清理的呢?引入我们知道,堆内存的空间是固定的,可以将内存空间理解为一个定长的数组,每次新建对象的时候,都会根据对象的大小,在数组中,按顺序选取一
2021-07-26 09:55:39 504
原创 JVM 内存结构
文章目录简单介绍 jvm运行过程中会遇到的一些内存部分运行过程使用到的空间内存空间划分线程共享堆内存堆内存的划分为什么做划分?必知必会元空间必知必会线程私有线程栈必知必会本地方法栈程序计数器总结现在我们知道,一个Java类在经过编译之后,其实大致可以分为class类摘要、常量池、方法栈帧这几部分,并且在jvm启动之后,是通过类加载器将这些类加载到jvm中,那么一个类在加载之后,他是如何可以被使用,可以被调用的呢?简单介绍 jvm运行过程中会遇到的一些内存部分我们要知道,jvm在运行过程中,所有的占用
2021-07-18 22:10:07 463
原创 Java类加载器(ClassLoader)
文章目录类的生命周期初始化时机不会被初始化的情况类加载器的分类启动类加载器(BootstrapClassLoader)扩展类加载器(ExtClassLoader)扩展类自定义加载的几种方式应用类加载器(AppClassLoader)自定义类加载器类加载器的特性双亲委派spi机制对双亲委派的破坏ps: 反射中Class.forName和ClassLoader的区别总结Java类加载器是jvm运行时环境的一个部件,负责将类动态的加载到虚拟机的内存中,类通常是按需加载,由于有了类加载器,Java运行时不需要知
2021-07-12 01:08:17 452
原创 Java字节码(Java bytecode)
java字节码,就是jvm执行的一种指令格式.jvm通过字节码指令,做相对应的动作字节码查看(助记符->二进制).class文件本身是二进制文件,我们可以以两种方式查看,一种就是直接看它的二进制内容,但是不方便查看和理解,还有一种是看它经过javap转成助记符模式的内容,方便我们理解二进制查看方式二进制文件查看器因为电脑中的二进制文件,一般文本编辑器在打开的同时会给做一些转义,这里推荐使用比如winhex这种软件查看,便于理解助记符查看javap使用javac命...
2021-07-05 09:46:44 3781 1
原创 单例模式在多线程中最经典的两种方式
这两种方式在提高性能的同时又保证了线程安全 第一种:static inner class 静态内部类(饿汉式): public class StringTest {public static class Singltion{private static Singltion singltion=new Singltion();public static Singltion...
2018-09-29 19:37:09 521
原创 jdk提供的阻塞队列BlockingQueue下的五个实现简单操作以及介绍
package cn.yarne.com.base.test;import java.util.Collections;import java.util.Date;import java.util.Iterator;import java.util.Vector;import java.util.concurrent.ArrayBlockingQueue;import java.ut...
2018-09-28 10:19:57 322
原创 jquery获取上传图片的尺寸
var _URL = window.URL || window.webkitURL;$("#aieg_b_img").on("change",function(){ var files=$(this).prop('files'); var file, img; if ((file=files[0])) { img = new Image();
2017-08-03 11:40:14 2357
原创 shiro执行流程
1.通过ini配置文件创建securityManager2.调用subject.login方法主体提交认证3.securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证4.ModularRealmAuthenticator调用IniRealm去Ini配置文件中查询用户信息5.ModularRealm根据输入
2017-07-10 16:40:40 2765
原创 文件打包下载
@ResponseBody @RequestMapping(value = "/downloadAll.json") public AjaxResponse downloadFileAll(String serverPath, HttpServletRequest request, HttpServletResponse response) {
2017-07-06 15:25:13 484
原创 jquery多文件上传,获取每个文件大小
var addImags =$(input的id).prop('files');var fileSize=0;for(var i=0;ifileSize=$(addImags)[i].size; if(fileSize>1048576){layer.msg("文件过大");return;}}
2017-06-28 17:45:30 2851
原创 LRU(Least Recently Used)
为了尽量减少与理想算法的差距,产生了各种精妙的算法,最少使用页面置换算法便是其中一个。LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到。这个,就是著名的局部性原理——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近最久使用的那个页
2017-06-27 09:00:37 443
原创 mybatis架构
1、 mybatis配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂3、 由会话工厂创建sqlS
2017-05-10 14:44:44 459
原创 spring mvc转发和重定向到根index.jsp
@RequestMapping("/goIndex.action")public String goIndex(HttpServletRequest request,HttpServletResponse response){HttpSession session = request.getSession();String bycart = (String) session.getAt
2017-04-17 15:03:27 2332
原创 缓存问题
java.util.Date date = new java.util.Date(); response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:页面的最后生成时间 response.setDateHeader("Expires",date.getTime()+20000); //Expires:过
2017-03-31 14:44:33 322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人