HashMap源码浅析

2020-11-11
阅读 21 分钟
1.4k
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。它继承了AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。

LinkedList源码简析

2020-11-09
阅读 8 分钟
1.1k
LinkedList是一个实现了<font color="red">List接口</font>和<font color="red">Deque接口</font>的<font color="red">双端链表</font>。

ArrayList源码分析

2020-11-08
阅读 13 分钟
1.2k
java.util.ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它具有容量能动态增长、元素增删慢、查找快的特点。

【并发编程】Atomic原子类

2020-11-06
阅读 12 分钟
2.9k
原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。

【并发编程】浅析AQS及并发工具类(Semaphore、CountDownLatch 、CyclicBarrier)

2020-11-05
阅读 24 分钟
1.5k
AQS 的全称为(AbstractQueuedSynchronizer),中文即“队列同步器”,这个类放在 java.util.concurrent.locks 包下面。

【并发编程】浅析ReentrantLock与ReadWriteLock

2020-11-04
阅读 21 分钟
2k
在Lock接口出现之前,Java程序是靠synchronized关键字用来实现锁功能,使用时隐式地获取和释放锁,但是它将锁的获取和释放固化了。

【并发编程】死锁

2020-11-04
阅读 8 分钟
998
死锁是指,两个或两个以上的线程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。简化一点说就是:一组相互竞争资源的线程因为互相等待,导致“永久”阻塞的现象。

【并发编程】volatile

2020-11-03
阅读 13 分钟
2k
JMM(Java Memory Model),是一种基于计算机内存模型(定义了共享内存系统中多线程程序读写操作行为的规范)并屏蔽了各种硬件和操作系统的访问差异,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

【并发编程】park与unpark、notify与notifyAll

2020-11-01
阅读 14 分钟
2.6k
<img src="https://img-blog.csdnimg.cn/20200929220833538.png" style="zoom:80%;" />

【并发编程】深入理解synchronized原理

2020-10-29
阅读 17 分钟
3.1k
通信是指线程之间以何种机制来交换信息。Java中并发采用的是共享内存模型,在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。

【并发编程基础】线程基础(方法、状态)

2020-10-27
阅读 20 分钟
995
<img src="https://img-blog.csdnimg.cn/20200929220833538.png" style="zoom:80%;" />

【JVM学习】对象实例化内存布局与访问定位

2020-10-25
阅读 3 分钟
1.3k
new:常见的使用 new 关键字创建对象、单例类中调用getInstance的静态类方法、XxxFactory/XxxBuilder静态方法。

【并发编程】线程上下文切换

2020-10-22
阅读 3 分钟
2.1k
单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。(时间片是CPU分配给各个线程的时间,因为时间片非常短,一般是几十毫秒,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的)。

【SpringBoot学习】整合

2020-10-19
阅读 18 分钟
988
一、Docker1、简介Docker是一个开源的应用容器引擎,是一个轻量级容器技术。Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为容器,容器启动是非常快速的。2、核心概念docker主机(Host):安装了Docker程序的机器(Docker直接安装...

【JVM学习】Class字节码文件结构

2020-10-19
阅读 3 分钟
1k
class字节码文件结构类型名称说明长度数量u4magic魔数,识别Class文件格式4个字节1u2minor_version副版本号(小版本)2个字节1u2major_version主版本号(大版本)2个字节1u2constant_pool_count常量池计数器2个字节1cp_infoconstant_pool常量池表n个字节constant_pool_count-1u2access_flags访问标识2个字节1u2this_class类索...

【SpringBoot学习】Web开发

2020-10-18
阅读 45 分钟
1.7k
一、SpringBoot对静态资源的映射规则静态资源的映射规则都在WebMvcAutoConfiguration中。(1)webjars:以jar包的方式引入静态资源所有 /webjars/** ,都在 classpath:/META-INF/resources/webjars/ 查找资源。 {代码...} webjars:以jar包的方式引入静态资源访问localhost:8080/webjars/jquery/3.5.0/jquery.js(2)/**...

【SpringBoot学习】日志框架

2020-10-17
阅读 7 分钟
1.9k
Spring框架默认是用JCL,SpringBoot的底层是Spring框架。Spring Boot在框架内容部使用JCL,spring-boot-starter-logging采用了 SLF4j+Logback的形式,Spring Boot也能自动适配(JUL、log4j2、logback) 并简化配置。

【SpringBoot学习】配置文件

2020-10-17
阅读 17 分钟
2.9k
在使用Spring Initializer快速创建SpringBoot项目时,会在resources目录下给我们一个默认的空的全局配置文件 application.properties。配置文件的作用也正是用来修改SpringBoot自动配置的默认值。

【SpringBoot学习】入门案例

2020-10-16
阅读 7 分钟
1.2k
J2EE的开发略显笨重,配置繁多、 部署流程复杂、第三方技术集成难度大,都很大程度上降低了开发效率。SpringBoot应运而生,SpringBoot简化了Spring应用开发,整合了Spring技术栈, 去繁从简,just run就能创建一个独立的、产品级别的应用,为J2EE开发提供了一站式解决方案。

【JVM学习】垃圾回收器

2020-10-15
阅读 20 分钟
2k
在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过并行回收器和并发回收器。所以,串行回收默认被应用在客户端的Client模式下的JVM中。

【JVM学习】垃圾回收相关概念

2020-10-15
阅读 11 分钟
1.5k
在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。

【JVM学习】垃圾回收相关算法

2020-10-15
阅读 10 分钟
1k
对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。

【JVM学习】——执行引擎

2020-10-14
阅读 8 分钟
2k
“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。

【JVM学习】——方法区

2020-10-10
阅读 8 分钟
4.2k
《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpot JVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。

【JVM学习】——本地方法栈、堆

2020-10-10
阅读 17 分钟
5.5k
简单地讲,一个Native Method就是一个Java调用非Java代码的接囗。该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C" 告知C++编译器去调用一个C的函数。

【运行时数据区】——程序计数器、虚拟机栈

2020-10-10
阅读 9 分钟
1.9k
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。

【JVM学习】——类加载器子系统

2020-10-06
阅读 11 分钟
2.6k
一、类加载器子系统1.1 JVM体系结构JVM被分为三个主要的子系统:(1)类加载器子系统(2)运行时数据区(3)执行引擎1.2 类加载器子系统作用(1)类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开有特定的文件标识(0xCAFEBABE)。(2)类加载器(Class Loader)只负责class文件的加载,至于它是...

【JVM学习】——JVM与JAVA体系结构

2020-10-05
阅读 8 分钟
3.4k
一、Java生态圈随着Java以及Java社区的不断壮大,Java也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。作为一个平台,Java虚拟机扮演着举足轻重的作用Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分。作为一种文化,Java几乎成为了“开源”的代名词。第三方开源软件和框架。如Tomcat...