- 博客(26)
- 收藏
- 关注
原创 细数synchronized与Lock的异同
文章目录前言一、存在层次上二、获取锁的方式三、释放锁的方式四、锁的状态五、锁的类型六、适用场景总结前言最近面试经常遇到过几次的一个问题就是,synchronized与Lock的区别?感觉每次答得都不够全面,不是漏了这就是漏了那的,为了加深记忆特地追加一篇博客来记录(我可真是个小机灵鬼)。为了详细的列举出这俩货的异同,这里分一下几个角度来对比:一、存在层次上synchronized:就是Java在JVM层次上提供的一个关键字,能直接拿来在方法或者代码块上面用,此时被标注的方法称为同步方法,被标
2021-04-06 17:37:52
215
原创 JVM三种GC流程比较
文章目录一、新生代垃圾回收(serial/ParallelScavenge/paraNew/G1)1.1 根据GC ROOT标记存活对象1.2 处理GenRemSet1.3 拷贝对象1.4 清除对象二、老年代垃圾回收(CMS)2.1 Initial Mark(初始化标记)2.2 Concurrent Mark(并发标记)2.3 Concurrent Preclean(并发预清理)2.4 Concurrent Abortable Preclean(可中止的并发预清理)2.5 Final Remark(重新标记
2021-04-05 22:58:35
724
原创 闲谈Java对象内存结构及字节计算
文章目录Java对象内存结构对象头对齐填充成员实例变量不同对象的计算展示Integer插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Java对象内存结构Java对象由对象头+对齐填充+成员实例变量对象头对象头由MarkWord标记字段和Klass类型指针两个区域组成,其中MarkW
2021-02-27 21:40:52
399
2
原创 JDK源码调试配置
https://blog.youkuaiyun.com/cherrycheng_/article/details/510043861、找个位置新建文件夹jdk7_src和jdk7_rt-debug(我的是D:\JDK\jdk7_rt-debug和D:\JDK\jdk7_src)2、将JDK下的src.zip(C:\Program Files (x86)\Java\jdk1.7.0_75\src.zip)复...
2019-06-29 13:31:09
318
原创 HashMap的链表成环演示
public class HashMapTest { Map<String, String>map = new HashMap<String, String>(4); CountDownLatch countDownLatch = new CountDownLatch(2); @Test public void test() throws I...
2019-06-27 17:27:43
3074
2
原创 SubLime支持OpenJDK源码方法跳转
最近对JVM的GC机制比较感兴趣,所以特地下载OpenJDK的源码下来抽空拜读一番。有个小问题就是,OpenJDK的源码下载解压之后是普通的目录结构层次并不是那种工程目录结构,而且里面同时存在Java和C++的源码,无法随便找个IDE放进去就能看了,会报一堆的错。尤其在查看源码的时候没法做到方法跳转(或者说是查看方法声明,比如eclipse查看一个完整的工程目录结构,想看对应方法声明的位置直接就...
2019-06-24 14:46:11
717
1
原创 阿里开源工具-arthas
**arthas具体有啥作用呢?**以下是摘抄自官方的一段话:当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?3、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?4、线上遇到某个用户的数据处理有问题,但线上同样...
2019-06-15 16:23:07
2473
原创 CountDownLatch用法极其源码浅析
1、构造实例CountDownLatch countDownLatch = new CountDownLatch(3);// 构造方法public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new S...
2019-06-15 14:58:07
137
原创 CMS的CMSInitiatingOccupancyFraction解析
concurrentMarkSweepGeneration.cppvoid ConcurrentMarkSweepGeneration::init_initiating_occupancy(intx io, uintx tr) { assert(io <= 100 && tr <= 100, "Check the arguments"); if (io >...
2019-06-13 11:10:21
22699
5
原创 你知道HashMap的put方法返回值是啥吗
public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key); int i = in...
2019-06-10 11:25:08
853
原创 线程池源码层级浅析
最顶层是一个Executor接口,它只有一个方法:public interface Executor { void execute(Runnable command);}ExecutorService扩展了Executor,添加了操控线程池生命周期的方法,如shutDown(),shutDownNow()等,以及扩展了可异步跟踪执行任务生成返回值Future的方法,如submit(...
2019-06-10 11:05:40
143
原创 MyBatis运行流程源码解析
1、读取MyBatis配置文件,构造SqlSessionFactory (实际默认实现是DefaultSqlSessionFactory )String configLocation= "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(configLocation);SqlSessionF...
2019-04-08 10:23:21
228
原创 Spring整合MyBatis代码流程解析
Spring与Mybatis整合的时候需要配置SqlSessionFactoryBean,该配置会加入数据源和mybatis xml配置文件路径等信息:<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref...
2019-04-06 17:13:43
309
原创 问题排查之频繁CMSGC
-XX:CMSInitiatingOccupancyFraction=60 -XX:+UseCMSInitiatingOccupancyOnly dd2019-03-28T10:10:46.489+0800: 1444.485: [GC (CMS Initial Mark) [1 CMS-initial-mark: 1685579K(2097152K)] 1791138K(398...
2019-03-31 15:49:06
1066
原创 springboot自动配置是如何实现的?
什么是SpringBoot自动配置? springboot的自动配置,指的是springboot会自动将一些配置类的bean注册进ioc容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它。 “自动”的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,springboot会自动注入这些配置bean,我们直接使用这些bean即可。Sprin...
2019-03-28 17:33:29
17468
1
原创 ReentrantLock源码解读
ReentrantLock构造函数:// 无参构造函数,默认非公平public ReentrantLock() { sync = new NonfairSync();}// 有参构造函数,参数:是否公平public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();...
2019-03-25 16:17:15
340
原创 Java多线程之AbstractQueuedSynchronizer
1、静态不可变内部类Node:static final class Node { static final Node SHARED = new Node(); static final Node EXCLUSIVE = null; static final int CANCELLED = 1; static final int SIGNAL = -1; ...
2019-03-25 15:08:45
318
原创 windows下maven打包镜像并推送docker服务器
1、修改docker服务器配置文件vim /usr/lib/systemd/system/docker.service将ExecStart这一行后面加上 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock,改完后如下所示:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:/...
2019-03-25 14:48:14
1830
原创 HashMap在JDK1.8如何确定初始化容量
DDpublic HashMap(int initialCapacity, float loadFactor) { if (initialCapacity &amp;amp;amp;amp;lt; 0) throw new IllegalArgumentException(&amp;amp;amp;quot;Illegal initial capacity: &amp;amp;amp;quot; +
2019-03-14 18:18:32
2750
原创 类加载机制之双亲委派模型
先说几个概念,方便后续理解:1、java代码编译后会生成JVM能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、转换解析、初始化,使这些数据最终成为可以被JVM直接使用的Java类型,这个过程叫做JVM的类加载机制。2、在JDK1.8以及之前,类加载器大概分为四个层级,依次为引导类加载器(Bootstrap ClassLoa...
2019-03-13 15:03:17
937
原创 问题排查之JVM内存溢出
起因:从前有一天,我正在专心致志的码着代码,然后同事发消息跟我说服务器好像崩了,现在所有业务服务都调用不了直接报错了。查找问题:服务器崩了这还了得,赶紧先等上管理中心瞄一眼,发现原本部署好的微服务状态全部变为异常了。出现这种问题,一般都是JVM崩了的情况。赶紧登上服务器后台,用jmap查了下JVM各个代的内存使用率,发现老年代内存使用率已经到99.9%了,用jstat看也是发现一直JVM一直...
2019-03-10 14:51:21
6632
1
原创 HashMap在JDK1.8版本尾插法实现解析
前面聊了HashMap在JDK1.7版本的头插法实现,现在聊HashMap到了JDK1.8版本升级之后的变化。先上代码:public V put(K key, V value) { return putVal(hash(key), key, value, false, true);}平时java代码都是调的这个方法,实际实现是putVal(hash(key), key, valu...
2019-03-09 18:40:29
8492
原创 HashMap在JDK1.7版本头插法实现解析
关于HashMap,不论是JDK1.7版本还是1.8版本的分析文章网上多如牛毛,今天咱虽然也是聊HashMap,但是稍微有点不同,是聊它在JDK1.7版本put元素时头插法的实现。不说废话了,直接上源码,先聊JDK1.7的元素插入:public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTabl...
2019-03-09 16:06:54
6561
原创 docker-componse安装教程
安装docker-compose之前,必须要先安装docker1.3或以上版本1、安装docker-composecurl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-uname -s-uname -m-o /usr/local/bin/docker-compose2、赋予权...
2019-03-09 14:36:38
2976
1
原创 原子类如何保证操作的原子性?
一、什么是原子性?所谓原子操作,就是&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;不可中断的一个或一系列操作&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot; 。硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是&amp;amp;amp;amp;amp;amp;amp;amp;a
2019-03-09 14:19:19
3078
原创 问题排查之服务响应超时
现象:在新搭建的测试环境调用业务服务(为了便于理解,后面直接称呼为服务A)一直无响应,等待若干时间只收到底层的超时报错。解决过程:我们系统运作方式大概就是一个总入口接收所有请求,然后根据指定规则将请求转发到相应服务内处理并最终返回,所以总入口和各自服务具有日志输入,所以先找测试妹子要了服务器账号,然后让她再操作一次,自己监控总入口日志和服务A日志,这时看到总入口是有接收到请求的,并且也已经转...
2019-03-09 14:15:37
5808
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人