自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (3)
  • 收藏
  • 关注

原创 关于hashcoed()方法

hashcode()方法也是Object基类下的方法,和toString(),equals()一样,所有类都可以重写hashcode()方法。hashcode()方法是根据对象的内存地址等对象自身相关信息生成一个hash值。hashcode()方法主要是配合一些散列集合使用的,比如HashMap,HashSet和HashTable等,当这些散列集合中存储对象时,hash值可以提高查询效率。原理...

2018-09-29 00:01:49 205

原创 CAS机制

CAS即比较与交换,是一种乐观策略。数据库的乐观锁就是基于CAS机制来实现的。CAS机制有三个关键值,内存中值A,内存中值的预期值B和即将更新后的目标值C。多线程中每个线程都会带一个B来与A比较,比较相等了就将A更新为C,这是一种无锁操作。CAS机制是CPU的一个操作机制,JAVA不能直接使用,需要调用UnSafe类来调用。java并发包中原子类都是CAS机制实现的。...

2018-09-27 23:20:24 221

原创 回忆今天一段SQL优化场景

由于手头没有现场SQL代码,只能回忆回忆,顺便总结总结。那段SQL的问题是执行时间很慢,left join了5张表当然慢了,其中四张表都是数据量很大的表,而且有一个在一个in()中写了一段很长的select。首先就把这个in()操作去掉了,修改了一下分页规则,这么一改立马就快了不少。但是页面响应超时是30秒还是超过啊,还要继续优化。5个left join通过一个一个的注释。。。。。嗯然后找到了...

2018-09-26 23:33:52 287

原创 关于JVM的指令重排序

指令重排序有两类,编译器重排序和处理器重排序。编译器重排序发生在编译期,处理器重排序发生在运行时。其实指令重排序的本意是提高程序并发效率,原则是重排序后的程序运行结果和单线程运行结果一致。为什么指令重排序会提高程序并发效率呢?这里先理解一下CPU的最小调度单位是线程这个概念。首先一个CPU同时只能处理一个线程,在最初单核CPU的时候,是通过轮询的方式去完成多线程的,在线程之间完成上下文切换。随...

2018-09-26 23:15:28 1118 1

原创 内存泄漏和内存溢出的区别

内存溢出是指向JVM申请内存空间时没有足够的可用内存了,就会抛出OOM即内存溢出。内存泄漏是指,向JVM申请了一块内存空间,使用完后没有释放,由于没有释放,这块内存区域其他类加载的时候无法申请,同时当前类又没有这块内存空间的内存地址了也无法使用,相当于丢了一块内存,这就是内存泄漏,值得注意的是内存泄漏最终会导致内存溢出,很好理解,内存丢了很多最后当然内存不够用了。C++比较容易内存泄漏,因为C++...

2018-09-24 22:30:38 484 1

原创 finalize机制

虽然JDK9之后用Cleaner机制代替了finalize机制进行内存清理,但是平时开发用的这里还是还是JDK8,emmmm.......就简单总结一下finalize机制吧。finalize()是Object类下的方法,所以任何类都可以重写finalize()方法,JDK1就有finalize机制,不过一直饱受诟病。主要是因为如果一个类重写了finalize()方法,那么这个类的创建和销毁都...

2018-09-22 13:25:42 1014

原创 JAVA实现获取占用本机指定端口号的外部ip

先粘代码 String[] netStatStr = {"/bin/sh","-c","netstat -ano | grep 5296"}; String temp; StringBuilder sb = null; try(InputStream inputstream = Runtime.getRuntime().exec(...

2018-09-20 22:52:29 806

原创 SpringMVC核心工作原理

一个web项目,用户的请求先到达了web容器,可以理解为先到了web.xml。然后在web.xml中配置servlet,servlet-class是SpringMVC的前端控制器即DispatcherServlet,配置如下:这样请求就到了前端控制器,然后前端控制器会调用处理器映射器即HandlerMapping 去找到何时的处理器,即合适的controller层中方法,找到对应的处理器后...

2018-09-19 23:27:36 466

原创 枚举类

枚举类是一种特殊的引用变量,它既可以像接口一样定义成顶层引用,又可以像内部类一样定义在类的内部。但是枚举类不能定义在方法里面,因为使用枚举类是需要在创建对象的,对象都在堆中被创建,而方法中的属性在栈中的方法区。之所以需要枚举类,是因为有时候方法里需要的值是固定范围的。其实实现这种要求很简单,最简单的方式就是使用数组、集合等带有存储性质将一定范围类的固定值放进去,可是这种方法缺陷很大,因为集合数...

2018-09-19 20:13:40 397

原创 静态内部类

要理解静态内部类,先理解两个概念,静态和内部类。如果一个类的属性被static修饰为静态,那么在类加载完成后就已经被初始化,即已经可以通过类名.属性名来调用了,不需要先去实例化这个类。这是因为之前提到的类加载过程,加载——>验证——>准备——>解析——>初始化。准备阶段给静态变量分配内存空间和初始值(null,0之类),初始化阶段即对这些变量做初始化操作。一个类在生命周期类...

2018-09-18 23:02:01 161

原创 JVM调优命令——jhat

jhat命令一般和jmap命令配合使用,用于分析jmap命令生成的heap dump文件。jhat命令内置一个微型的HTTP/HTML服务器,可以以web网页的形式查看分析结果,所以一般不会直接在应用服务器上使用jhat命令,一般将heap dump文件拿到其他服务器上去分析。主要参数:1.-j<flag>由于jhat命令启动一个JVM来执行,用该参数可以设置JVM的启动参...

2018-09-16 22:36:07 546

原创 JVM调优命令——jstack

jstack命令最大的作用就是用来生成thread dump文件,thread dump文件中记录了某一时刻CPU信息,例如线程执行到哪个类中的哪个方法上以及现在的线程状态。分析线程状态对JVM调优意义重大,比如在某个方法阻塞,等待等。由于thread dump记录的是某一时刻的CPU信息,所以一般调优时候需要间隔10s左右输出两三份thread dump文件来对比分析。命令格式为 :  ...

2018-09-16 00:06:07 3925

原创 JVM调优命令——jmap

JVM调优最重要的是通过分析dump文件。dump文件有两种,一种是heap dump文件,另一种是thread dump文件。heap dump文件是某一时刻JVM堆存储的快照,是一种镜像文件,用来记录某一时刻内存信息,包括内存的占用,使用率以及GC方式等。而thread dump是记录某一时刻cpu信息,主要是线程的执行情况等,例如某一时刻线程执行到哪个类的哪个方法上了。heap dump文件...

2018-09-14 19:58:59 821

原创 JAVA缓存机制

缓存机制在提高程序效率上有很明显的作用,JAVA实现缓存的方式也有很多种。主要分为JVM内置缓存和用户自己实现的缓存以及一些缓存框架。JVM内置缓存主要有OScache,Ehcache等,其中OScache只要用户缓存静态页面,例如缓存JSP等,而Ehcahce主要面向数据库,操作数据库取到的数据可以放在Ehcache中,避免多次操作数据库。JVM内置的缓存大多是简单而不实用的,所以一般在应用...

2018-09-11 22:34:59 817

原创 为什么将String设计为不可变

谈到String为不可变对象,有一个容易混淆的误区,例如:这里a只是一个对象的引用,最明显的比如Class cls;这只是创建了Class对象的引用,Class cls = new Class();才是创建Class对象。所以这里其实是创建了两个字符串对象。同样的误区还有对字符串的一些操作方法后,substring(),replace()等,其实这都是重新创建了字符串对象,与字符串对象不可...

2018-09-11 00:52:29 1460

离线安装docker.zip

在内网服务器中离线安装Docker的本地源,rpm完整,版本适配,附教程链接,亲试有效

2020-06-18

rabbitmq镜像包.zip

RabbitMQ的Docker镜像包,带管理界面版本和不带两个镜像包都有,直接拷贝到服务器中load

2020-06-18

linux安装RabbitMQ(3.6版本)

linux中安装RabbitMQ所需的三个rpm以及详细安装教程,亲试可用,包含RabbitMQ、Erlang以及Socat三个rpm,版本互相适配

2020-06-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除