自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 问答 (1)
  • 收藏
  • 关注

原创 深入理解JVM阅读笔记(二)

深入理解JVM阅读笔记(二)1.为什么Java的不能采用引用计数法来判断对象是否可回收?因为存在循环引用的问题,对象A和对象B互相引用,就算他们已经不存在其他引用了,但是依然无法被GC2.什么判断方式比较合适?可达性分析算法:从一个被作为“GC Roots”的对象作为起始点,从这些节点向下搜索,走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,则证明该对象不可用。注:如下对象可以作为GC Roots虚拟机栈中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象

2021-06-20 17:55:19 132

原创 深入理解JVM阅读笔记(一)

深入理解JVM阅读笔记(一)1.JVM内存区域划分线程私有程序计数器:该计数器记录的时是正在执行的虚拟机字节码指令的地址,如果正在执行Native方法,该计数器则为空。字节码解释器通过修改该计数器的值来获得下一条需要执行的字节码指令。虚拟机栈:虚拟机栈是描述方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧,栈帧里存储了局部变量表,操作数栈,动态链接和方法出口信息。方法从开始执行到执行完成,就对应一个栈帧从入栈到出栈的过程。会抛出两种异常,StackOverflowError(线程请求的栈深

2021-06-15 16:15:37 1103 1

原创 java并发编程阅读笔记(二)—— volatile

java并发编程阅读笔记(二)—— volatile**特点:**开销小,保证了可见性1.volatile保证可见性的原因?在一般情况下变量的写只会被写入缓存,而被写入主存的时间不确定。被volatile修饰的变量在进行写操作时,JVM会向CPU发送一条Lock前缀的指令,立刻将最新的内容写入主存,缓存一致性规则使得当一个处理器的缓存写回到主存时,其他处理器上针对这一变量的缓存会失效。即处理器通过嗅探技术保证它的内部缓存,系统内存和其他处理器的缓存的数据在总线上一致。2.volatile可以保

2021-06-13 17:38:21 104

原创 Java并发编程艺术阅读笔记(一)

Java并发编程艺术阅读笔记(一)1.什么是上下文切换CPU通过时间片分配算法循环执行任务,执行完一个任务的时间片后就会切换到下一个任务。但是在切换任务之前会保存上一个任务的状态,在切换回该任务,会重新加载该任务的状态。这种状态的保存和加载称为上下文切换。2.并发一定会比串行执行快吗?不一定,因为线程存在创建和上下文切换的开销3.如何减小上下文切换的开销?无锁并发编程:不给数据加锁,而是把数据通过哈希算法分段,将各段分给各线程处理。CAS算法:使用Atmoic包下的CAS算法,而不需要加锁。

2021-06-13 16:50:58 1086 1

原创 讲讲自旋锁

自旋锁产生原因是什么?在使用synchronized锁后,大家发现了如下问题:多线程竞争锁时,除了获得锁的线程,其余所有的锁均进入了阻塞的状态,由于挂起线程和回复线程都需要转移到内核态中完成,所以会占用大量的系统资源共享数据锁定的时间较短,为了这个较短的时间去挂起线程并不值得解决方法为了解决这一问题,考虑到当下多处理器环境下,可以让没有获取到锁的线程进行自旋,不放弃CPU的使用时间,等待持有锁的线程是否会释放锁。当该线程超过设置的自旋次数阈值时,则进入传统的挂起状态。优缺点:优点是在锁被占

2021-06-12 18:02:23 224

原创 CASthinking

CAS1.What is CAS?As it is said in wikipedia, compare-and-swap (CAS) is an atomic instruction used in multithreading to achieve synchronization. It compares the contents of a memory location with a given value and, only if they are the same, modifies the

2021-06-11 15:16:31 85 1

原创 Abstract Factory pattern

Abstract Factory pattern1.Brief:It defines an interface Factory for a family of products which can be considered as an abstract factory. There are concrete classes like xxxFactory implement Factory. Each xxxFactory provides operations of a specific type

2021-06-09 17:28:28 93

原创 HashMap Source Code Reading

HashMap Source Code ReadingBriefnull key and null value permittedorder of map is not guaranteed and keep changing overtimenot synchronizedclone(): shallow copy1.What’s the time complexity of get and put method for HashMap?O(1)O(1)O(1)2.What affec

2021-06-08 13:15:52 151

原创 LinkedList source code reading

LinkedList source code readingBrief: a Doubly-linked list implementation, null element permitable, not synchronized, fail-fast operation1.How does the Node class define?fielditem: storing datanext: next nodeprev: previous node2.What are the constu

2021-06-04 15:22:50 71

原创 Vim Instructions Summary

Vim Instructions SummaryText Entry Commandsa Append text following current cursor positionA Append text to the end of current linei Insert text before the current cursor positionI Insert text at the beginning of the cursor lineo Open up a new line f

2021-06-03 19:34:33 91 1

原创 ArrayList source code Reading

ArrayList source code Reading1.How many Constructors for ArrayList?Three,no param: set this.elementData to DefaultCapacity_Empty_ElementData.param with #element: if #element is 0, set this.elementData to Empty_ElementData, else, new Object[#element].

2021-06-03 16:39:45 95

原创 图遍历算法-DFS和BFS

图遍历算法-DFS和BFS在学习图的时候,我们接触到了两种算法DFS和BFS,对于这两种算法,他们在思想上有较大差异并且使用也非常的不同。1.DFS和BFS不同之处DFS用通俗的话来说就是宣扬一种不撞南墙不回头的精神。从初始点出发,沿着一条方向,一直到该方向走通或者走不通,然后回到初始点,从初始点的另一个方向继续出发,如此往复,直到走完所有的方向。​ (图片源自https://cuijiahua.com/blog/2018/01/alogrithm_10.html)BFS

2020-09-03 10:13:43 543

原创 Java编程思想 day1

Java编程思想Day 1引用和对象:引用可以在创建的时候和对象连接,也可以选择不连接。比如制造一个遥控器,可以在制造的时候制造出配套的电视机,也可以选择单独只制造一个遥控器。其中引用存放于堆栈中,对象存放于堆中。基本类型:基本类型存放于堆栈中。基本类型的占用空间大小是确定的,因为Java程序需要通过上下移动堆栈中的指针来使得程序正确运行,因此需要确定的大小来确定位置。调用对象的方法:对于Java中的方法调用,当参数为一个基本类型的时候,传递的是一个值,如果参数为一个引用类型,传递的是一个

2020-09-02 22:06:57 188

原创 C++版Hello World

为什么要用C++C语言于1972年正式创立,之后贝尔实验室的Bjame Sgoustrup开始着手改良C语言。在1983年将这个语言正式命名为C++,也就是C plus plus。C和C++可以说是一脉相承,他们之间的关系不像父子,而是兄弟,像父子的是Java和C#(狗头)。C语言作为一款面对结构编程的语言,在面对结构非常庞大,代码量非常庞大的情况时,往往显得力不从心,C++则在C的基础上,实...

2019-12-13 12:06:35 118

空空如也

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

TA关注的人

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