
第十阶段、底层调优与算法深入
文章平均质量分 51
模块一、数据结构、算法
模块二、并发编程、JVM优化、Linux优化
坐在西半球上
努力努力。
展开
-
java虚拟机的内存管理
一、JVM整体架构 二、JVM运行时内存 2.1 PC 程序计数器 2.2 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 元空间 2.6 方法区 2.7 运行时常量池 2.8 直接内存 三、实战OutOfMemoryError异常原创 2021-04-28 11:36:21 · 1372 阅读 · 0 评论 -
JVM的回顾
JVM的回顾原创 2021-04-28 11:33:53 · 141 阅读 · 0 评论 -
10-2-2 JVM学习目录
10-2-2 JVM学习目录原创 2021-04-22 17:47:46 · 120 阅读 · 0 评论 -
Phaser
Phaser原创 2021-04-22 17:44:33 · 136 阅读 · 0 评论 -
Exchanger
Exchanger原创 2021-04-22 17:43:59 · 119 阅读 · 0 评论 -
CyclicBarrier
CyclicBarrier原创 2021-04-22 17:43:26 · 100 阅读 · 0 评论 -
StampedLock
StampedLock原创 2021-04-22 17:41:57 · 94 阅读 · 0 评论 -
ReentrantReadWriteLock
ReentrantReadWriteLock原创 2021-04-22 17:41:17 · 150 阅读 · 0 评论 -
ReentrantLock
ReentrantLock原创 2021-04-22 17:40:43 · 81 阅读 · 0 评论 -
Condition
Condition原创 2021-04-22 16:07:10 · 163 阅读 · 0 评论 -
HashMap经典20问
2、自定义线程池 Java 创建线程池的方法有: 1、 通过 ThreadPoolExcetor 或者 ScheduledThreadPoolExcutor 。 2、通过Executors 的工具类创建四个java默认的线程池、 但是阿里使用手册明确表示线程池不能使用Executors创建。 因为 :1、默认的线程池名字是默认的不方便排查。 2、底层使用的无限队列,会造成系统内存过大,或者系统假死。 从图中可以看到 线程的名字生成规则、 代码很简单,就是 package com.lagou.threadp原创 2021-04-21 10:34:28 · 313 阅读 · 0 评论 -
ThreadLocal
ThreadLoad原创 2021-04-20 21:21:57 · 116 阅读 · 2 评论 -
线程池
线程学习:https://blog.youkuaiyun.com/qq_42082278/article/details/107465102 1、线程池的实现原理 下图所示为线程池的实现原理:调用方不断地向线程池中提交任务;线程池中有一组线程,不断从队列中取任务,这是一个典型的生产者-消费者模型 ...原创 2021-04-20 18:50:33 · 165 阅读 · 0 评论 -
CountDownLatch
CountDownLatch原创 2021-04-20 13:29:51 · 115 阅读 · 0 评论 -
AQS
AQS AQS的实现原理是什么 java API中哪些类中使用了AQS原创 2021-04-20 09:27:57 · 112 阅读 · 0 评论 -
CAS详解
目录四、CAS存在三大问题4.1 ABA问题4.2 循环时间长开销大4.3 只能保证一个共享变量的原子操作 CAS (Compare-And-Swap),即比较替换,是实现并发应用到的一种技术。操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。 四、CAS存在三大问题 4.1 ABA问题 4.2 循环时间长开销大 4.3 只能保证一个共享变量的原子操作 ...原创 2021-04-20 09:26:48 · 264 阅读 · 0 评论 -
Semaphore
Semaphore也就是信号量,提供了资源数量的并发访问控制,其使用代码很简单,如下所示:原创 2021-04-20 08:57:08 · 100 阅读 · 0 评论 -
BlockingDeque
BlockingDeque原创 2021-04-19 22:45:28 · 82 阅读 · 0 评论 -
BlockingQueue
目录 在所有的并发容器中,BlockingQueue是最常见的一种。BlockingQueue是一个带阻塞功能的队 列,当入队列时,若队列已满,则阻塞调用者;当出队列时,若队列为空,则阻塞调用者。 在Concurrent包中,BlockingQueue是一个接口,有许多个不同的实现类,如图所示 ...原创 2021-04-19 22:43:52 · 143 阅读 · 0 评论 -
JMM内存模型
一、 JMM与happen-before 1.1 为什么会存在“内存可见性”问题 下图为x86架构下CPU缓存的布局,即在一个CPU 4核下,L1、L2、L3三级缓存与主内存的布局。每个核上面有L1、L2缓存,L3缓存为所有核共用。 ...原创 2021-04-19 18:02:08 · 285 阅读 · 0 评论 -
并发
一、并发核心概念 1、 并发与并行 2、同步 3、不可变对象 4、原子操作和原子变量 5、共享内存与消息传递 二、并发的问题原创 2021-04-19 18:00:41 · 521 阅读 · 0 评论 -
线程的优雅关闭
1、 stop与destory函数 线程是“一段运行中的代码”,一个运行中的方法。运行到一半的线程能否强制杀死? 不能。在Java中,有stop()、destory()等方法,但这些方法官方明确不建议使用。原因很简单,如果强制杀死线程,则线程中所使用的资源,例如文件描述符、网络连接等无法正常关闭。 因此,一个线程一旦运行起来,不要强行关闭,合理的做法是让其运行完(也就是方法执行完毕),干净地释放掉所有资源,然后退出。如果是一个不断循环运行的线程,就需要用到线程间的通信机制,让主线程通知其退出。 ...原创 2021-04-19 17:55:47 · 118 阅读 · 0 评论 -
InterruptedException与interrupt()方法
Interrupted异常 什么情况下会抛出Interrupted异常 假设while循环中没有调用任何的阻塞函数,就是通常的算术运算,或者打印一行日志,如下所示 2、 轻量级阻塞与重量级阻塞 能够被中断的阻塞称为轻量级阻塞,对应的线程状态是WAITING或者TIMED_WAITING;而像synchronized 这种不能被中断的阻塞称为重量级阻塞,对应的状态是 BLOCKED。如图所示:调用不同的方法后,一个线程的状态迁移过程。 初始线程处于NEW状态,调用start()开始执行后,进入RUNNING原创 2021-04-19 17:55:04 · 274 阅读 · 0 评论 -
wait与notify
这里写目录标题一、案例:生产者−消费者模型1.1 介绍1.2 如何阻塞1.3 如何双向通知1.4 为什么必须和synchronized一起使用1.5 为什么wait()的时候必须释放锁1.6 wait()与notify()的问题 一、案例:生产者−消费者模型 1.1 介绍 生产者-消费者模型是一个常见的多线程编程模型,如下图所示: 一个内存队列,多个生产者线程往内存队列中放数据;多个消费者线程从内存队列中取数据。要实现这样一个编程模型,需要做下面几件事情: 内存队列本身要加锁,才能实现线程安全。 阻塞。原创 2021-04-19 17:53:03 · 200 阅读 · 0 评论 -
synchronized 关键字
目录1、锁的对象2、锁的本质3、实现原理 1、锁的对象 synchronized关键字"给某个对象加锁",实例代码 public Class MyClass { public void synchronized method1() { // ... } public static void synchronized method2() { // ... } } 等价于: public class MyClass { public void method1() { synchroniz原创 2021-04-19 17:33:23 · 133 阅读 · 0 评论 -
Java中的线程
这里写目录标题原创 2021-04-19 15:15:38 · 88 阅读 · 0 评论 -
10-2-1 并发编程的学习目录
一、多线程回顾 1.1 Thread和Runnable原创 2021-04-19 15:12:07 · 360 阅读 · 0 评论 -
10-1-2 数据结构与算法高级(下)
一、数据结构 1.1 树 树的概念 有很多数据的逻辑关系并不是线性关系,在实际场景中,常常存在着一对多,甚至是多对多的情况。 家谱: 组织结构: 书的目录:原创 2021-03-11 10:33:41 · 1009 阅读 · 0 评论 -
10-1-1 数据结构与算法(上)
数据结构与算法概述原创 2021-03-07 17:50:52 · 380 阅读 · 0 评论 -
第十阶段、底层调优与算法深入(未学习,只有目录,内容后面学到补上
目录概述模块一、数据结构、算法模块二、并发编程、JVM优化、Linux优化 概述 底层调优和算法是架构师必备技能之一,有时项目性能瓶颈是要通过底层调优实现的,而一些高级的内核和引擎开发往往是需要一些精良算法才能完成的。 模块一、数据结构、算法 本模块会讲解算法高级内容,例如高级数据结构、排序、递归与回溯、深度与广度优先搜索、动态规划、二分搜索与贪婪算法等。 模块二、并发编程、JVM优化、Linux优化 本模块会深入讲解线程高级部分,例如线程状态机制分析与线程池实现原理、抽象队列化同步器AQS等,还会深入原创 2020-11-11 09:55:49 · 485 阅读 · 0 评论