
Java
「已注销」
本博客现只用于学习用,可能会转载他人的知识,若有涉及到您的版权问题,请与我联系。
展开
-
伪共享(false sharing),并发编程无声的性能杀手
什么是共享下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存,越靠近CPU的缓存,速度越快,容量也越小。所以L1缓存很小但很快,并且紧靠着在使用它的CPU内核;L2大一些,也慢一些,并且仍然只能被一个单独的CPU核使用;L3更大、更慢,并且被单个插槽上的所有CPU核共享;最后是主存,由全部插槽上的所有CPU核共享。当CPU执行运算的时候,它先去L1查找所需的数据、再去...原创 2020-04-02 11:35:08 · 632 阅读 · 0 评论 -
【代理模式】Java的三种代理模式 - 静态代理,动态代理,Cglib代理
代理(Proxy)是一种设计模式,定义:为其他对象提供一个代理以控制对某个对象的访问,即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。为什么使用代理我们在写一个功能函数时,经常需要在其中写入与功能不是直接相关但很有必要的代 码,如日志记录,信息发送,安全和事务支持等,这些枝节性代码虽然是必要的,但它会带来以下麻烦:枝节性代码...原创 2020-04-01 01:28:13 · 427 阅读 · 0 评论 -
【Java】ConcurrentHashMap
ConcurrentHashMap是Java中的一个线程安全且高效的HashMap实现。平时涉及高并发如果要用map结构,那第一时间想到的就是它。那么我就这几个方面了解一下ConcurrentHashMap:ConcurrentHashMap在JDK8里结构ConcurrentHashMap的put方法、size方法等ConcurrentHashMap的扩容HashMap、Hashta...原创 2020-03-31 22:05:01 · 360 阅读 · 0 评论 -
【设计模式】策略模式VS状态模式
在行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式。但根据两者的定义,我们发现两者的区别还是很明显的:策略模式封装的是不同的算法,算法之间没有交互,以达到算法可以自由切换的目的;而状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的。这两种模式虽然都有变换的行为,但是...原创 2020-03-31 21:24:29 · 418 阅读 · 0 评论 -
【Java】Java语言学习思维导图
mark。原创 2020-03-31 20:52:35 · 397 阅读 · 0 评论 -
【Java】ReentrantLock 可重入锁
ReentrantLock的介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性,synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式...原创 2020-03-31 20:50:57 · 378 阅读 · 0 评论 -
【Java】获取源码
直接获取https://github.com/LLLUZHAO/JavaSrc使用git clone:git clone https://github.com/LLLUZHAO/JavaSrc.git安装安装mercurial:brew install mercurial:brew install mercurial==> Downloading https://home...原创 2020-03-30 05:19:04 · 560 阅读 · 0 评论 -
【Java】从汇编码分析java对象的创建过程
源码:class T { int m = 8;}T t = new T();汇编码:0 new #2 <T>3 dup4 invokespecial #3 <T.<init>>7 astore_18 returnnew #2 申请内存,在堆里面创建一个新对象。半初始化,新建对象中的m值是0。dup复制操作,因为invokespe...原创 2020-03-30 05:03:17 · 784 阅读 · 0 评论 -
【Redis】
@redis单线程问题单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。@为什么说redis能够快速执行绝大部分请求是纯粹的内存操作(非常快速)采用单线程,避免了不必要的上下文切换和竞争条件非阻塞IO - IO多路复用@redis的内部实现内部实现采用epoll,采用了epoll+自己实现的简单的事件...原创 2020-03-28 00:01:13 · 423 阅读 · 0 评论 -
Java HashMap工作原理
HashMap的使用过程一般类似如下:HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("语文", 1);map.put("数学", 2);map.put("英语", 3);map.put("历史", 4);map.put("政治", 5);map.put("地理", 6...原创 2020-03-27 12:01:33 · 410 阅读 · 0 评论 -
死信队列 DLX(dead-letter-exchange)
利用DLX, 当消息在一个队列中变成死信(dead message)之后,它能被重新publish到另一个Exchange,这个Exchange就是DLX。消息变成死信一向有一下几种情况:消息被拒绝(basic.reject/ basic.nack)并且requeue=false消息TTL过期队列达到最大长度DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在...原创 2020-03-27 11:14:26 · 1049 阅读 · 0 评论 -
彻底理解Netty,这一篇文章就够了
https://github.com/netty/nettyhttps://juejin.im/post/5bdaf8ea6fb9a0227b02275ahttps://www.jianshu.com/p/b9f3f6a16911https://www.zhihu.com/question/24322387原创 2020-03-24 00:45:22 · 423 阅读 · 0 评论 -
Java RMI(Remote Method Invocation)远程方法调用 详解
远程方法调用Remote Method Invocation是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。编写一个RMI的步骤定义一个远程接口,此接口需要继承java.rmi.Remote开发远程接口的实现类创建一个server并把远程对象注册到端口创建一个client查找远程对象,调用远程方法实例定义一个远程接口public...原创 2020-03-19 14:33:22 · 1253 阅读 · 1 评论 -
volatile关键字 C++与Java的区别
volatilevolatile这个单词在英文之中的意思是:易变的,不稳定的的含义。在Java中也有volatile关键字,Java之中volatile的作用是:确保内存可见性:读写变量具有全局有序性,保证当前线程读到的值是内存中最新的,而不是缓存中的值。但是volatile关键字并不保证线程读写变量的相对顺序,所以适用场景有限。禁止指令重排序:指令重排序是JVM为了提高运行程序的效率,...原创 2020-03-12 02:09:57 · 2774 阅读 · 0 评论 -
Google出版的多语言(C++,Java,Go..)编译工具 - Bazel
bazelBazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outp...原创 2020-03-09 18:58:31 · 1111 阅读 · 0 评论 -
简单说一下Timsort排序算法(Python,Java的官方排序算法)
学过编程的人都学过排序算法,学过排序算法的人肯定都听说过归并排序。Timsort排序算法就是归并排序的改进算法。它改进了哪里?回想下归并排序的特点:排序过程需要将原数列一分为二,先将子序列排序好后在归并。整个排序过程接近于一颗完全二叉树。它的比较次数相对稳定。如果对于已经有序(顺序或逆序)的结构依然花费比较比较高的时间。Timsort就是对归并排序存在的缺点进行了改进。归并排序其...原创 2020-03-09 14:02:56 · 663 阅读 · 0 评论 -
Java集合的Fail Fast 快速失败机制
Fail Fast在系统设计中,快速失效系统一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。这种设计通常会在操作中的多个点检查系统的状态,因此可以及早检测到任何故障。快速失败模块的职责是检测错误,然后让系统的下一个最高级别处理错误。Java集合中的Fail FastConcurrentModificationExcept...原创 2020-03-08 22:24:31 · 352 阅读 · 0 评论 -
spurious wakeup -- 多线程之虚假唤醒
Spurious wakeup一般来说,线程进入休眠状态,直到下面四种情况发生:其他线程调用被锁对象的notify方法,唤醒此线程其他线程调用被锁对象的notifyAll方法,唤醒阻塞的所有线程其他线程调用了此线程的interupt方法指定的时间到了线程在其他情况下醒来,就叫做虚假唤醒。官方解释:means that when you wait on a condition ...原创 2020-02-19 22:37:12 · 460 阅读 · 0 评论