- 博客(9)
- 收藏
- 关注
原创 JVM内存模型
运行时数据区 程序计数器(PC寄存器) 程序计数器是每个线程所私有的。 由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令, 因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰, 否则就会影响到程序的正常执行次序。因此,可以这么说,程序计数器是每个线程所私有的。 java栈 Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法
2021-09-09 08:48:25
123
原创 MESI(缓存一致性协议)
现在的处理器都是多核处理器,并且每个核都带有多个缓存(指令缓存和数据缓存,见下图)。为什么需要缓存呢,这是因为CPU访问内存的速度比较慢,所以在CPU和内存之间加了个缓存以提高访问速度。既然每个核都有缓存,那么假设两个核或者多个核同时访问同一个变量时这些缓存是如何进行同步的呢(缓存细分为一个个缓存行),这就有了MESI协议。 1.当cpu1读取一个缓存行时,状态为E,独享。 2.当cpu2读取同一个缓存行时,状态为S,共享。 3.当cpu1修改该缓存时,状态改为M修改。cpu2中的缓存状态为I,无
2021-09-01 08:52:19
249
原创 JVM虚拟机-class加载过程
一、Java从编码到执行 首先我们来看一下Java是如何从编码到执行的呢? 我们有一个x.java文件通过执行javac命令可以变成x.class文件,当我们调用Java命令的时候class文件会被装载到内存中,这个过程叫做classloader。一般情况下我们自己写代码的时候会用到Java的类库,所以在加载的时候也会把Java类库相关的类也加载到内存中。装载完成之后会调用字节码解释器和JIT即时编译器来进行解释和编译,编译完之后由执行引擎开始执行,执行引擎下面对应的就是操作系统硬件了。下图是大体的流程:
2021-08-31 14:28:40
479
原创 多线程与高并发-ReentrantLock源码
一相关类和接口 ReentrantLock继承接口Lock。 ReentrantLock内部类Sync,继承抽象类AbstractQueuedSynchronizer。 ReentrantLock内部类FairSync,继承抽象类Sync ReentrantLock内部类NonfairSync,继承抽象类Sync 二源码解析 源码可以自己去翻看,比较简单,这里不粘贴了。 lock(),公平锁FairSync: 检查state是否为0,如果为0,调用compareAndSetState()
2021-08-30 09:08:47
131
原创 多线程与高并发-AtomicInteger、LongAdder
AtomicInteger原子操作类 incrementAndGet方法采用CAS操作,做到了非阻塞同步。 public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return next;
2021-08-27 15:13:52
233
原创 多线程与高并发-Synchronized与volatile
一.为什么要使用synchronized 在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块。 二.实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区。 三.synchronized的三种应用方式 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 普通同步方法(实例方法):锁是当前实例对象
2021-08-27 08:49:47
152
原创 java容器
一:集合的主要接口 Collection:List、Set、Queue Map 二:接口主要实现 1.List List是有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 用户插入的顺序或者指定的位置就是元素插入的位置。它与Set不同,List允许插入重复的值。 List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正
2021-08-24 09:06:46
117
原创 多线程与高并发-线程
一:进程与线程 1. 进程 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。 2. 线程 线程是一条可以执行的路径。 线程是一条执行路径,是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU
2021-08-23 09:33:58
235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅