文章分类 - 准备
AQS
摘要:AQS(AbstractQueuedSynchronizer) 抽象的队列同步器 是用来构建锁和其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态。
阅读全文
LockSupport
摘要:LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中park()和unpark()方法的作用分别是阻塞线程和解除阻塞线程。 线程等待唤醒机制(wait/notify) 3种让线程等待和唤醒的方法 使用Object中的wait()方法让线程等待,使用Object
阅读全文
Leetcode 两数之和
摘要:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的两个整数,并返回他们的数组下标。 public class LeetCode { public static void main(String[] args) { int[] nums={2,7,11,15}; int
阅读全文
intern方法
摘要:String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含了一个等于String对象的字符串,则返回代表池中这个字符串的String对象的引用;否则,会将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。 String str1 = "a";
阅读全文
JVM垃圾回收器
摘要:垃圾回收的几种常用算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法。 JVM的垃圾收集器:serial收集器、parnew收集器、parallel scavenge收集器、serial old收集器、parallel old收集器、cms收集器、g1收集器。 HotSpot虚拟机所包含的
阅读全文
jvm类加载全过程
摘要:JVM把class文件加载到内存,并对数据进行校验,解析和初始化,最终形成JVM可以直接使用的java类型的全过程。 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后再开始,因为java支持运行时绑定。 加
阅读全文
OOM
摘要:OOM,全称"Out Of Memory",内存耗尽。当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error。 内存泄露:申请试用完的内存没有释放,导致虚拟机不能再次试用该内存,此时这段内存就泄露了,因为申请者不用了,而不能被虚拟机分配给别人用。 内存
阅读全文
JVM参数
摘要:JVM参数类型: 标配参数 java -version java -help java -showversion X参数 -Xint :解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式 XX参数 Boolean类型 KV设置类型 Boolean类型 公式:+或者-某个属性
阅读全文
JVM内存结构和GC
摘要:1,JVM内存结构 JVM把内存分成如下区域: 1)方法区(Method Area) 2)堆区(Heap) 3)虚拟机栈(VM Stack) 4)本地方法栈(Native Method Stack) 5)程序计数器(Program Counter Register) 其中的方法区和堆区,线程共享。
阅读全文
linux分析生产环境cpu占用过高
摘要:1)整机:top 查看cpu和内存 系统的负载均衡(三个值:5分钟,10分钟,15分钟对应的负载值),(三个值相加的和)/3*100%,如果大于60%,则表示系统的压力重。 uptime 查看系统性能的精简版 2)查看cpu:vmstat 查看但不限于cpu vmstat -n 2 3 一般vmst
阅读全文
github
摘要:常见词义: watch:会持续收到该项目的动态 fork:复制某个项目到自己的github仓库中 star:点赞 clone:将项目克隆到本地 follow:关注感兴趣的作者,会收到他们的动态 in关键词 限制搜索范围 公式:XXX关键词 in:name或description或readme XXX
阅读全文
死锁
摘要:死锁是指两个或两个以上的进程在执行的过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉,那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
阅读全文
线程池
摘要:线程池的使用及优势 线程池主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 主要特点:线程复用,控制最大并发数,管理线程。 1)降低资源消耗。通过重复利用已创建的线程
阅读全文
生产者消费者的三种方式
摘要:生产者消费者模式 1,生产者只在仓库未满时进行生产,仓库满时生产者进程被阻塞。 2,消费之只在仓库非空时进行消费,仓库为空时消费者进程被阻塞。 生产者消费者问题都是通过锁的竞争进行资源的消耗或生产。 方法一:synchronized,wait,notify 资源 public class Resou
阅读全文
线程通信生产者消费者阻塞队列版
摘要:一个初始值为0的变量,两个线程对其交替操作,一个加1,一个减1,循环5次。 代码: public class ProduceConsumer_BlockingQueue { public static void main(String[] args) { MyResource myResource
阅读全文
锁绑定多个条件condition
摘要:多线程之间按顺序调用,实现A->B->C,要求AA打印5次,BB打印10次,CC打印15此。循环10次。 代码: public class ConditionDemo { public static void main(String[] args) { PrintStr printStr = new
阅读全文
线程通信之生产者消费者传统版
摘要:一个初始值为0的变量,两个线程对其交替操作,一个加1,一个减1,循环5次。 代码: public class ProduceConsumer_TraditionDemo { public static void main(String[] args) { MyData myData = new My
阅读全文
阻塞队列
摘要:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作时:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者存放元
阅读全文
Semaphore
摘要:Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。 主要作用: 用于多个共享资源的互斥使用 用于并发线程数的控制 主要方法: Semaphore(int permits):构造方法,创建具有给定许可数的计数信号量并设置为非公平信号量。 Semaphore(int pe
阅读全文
CyclicBarrier
摘要:CyclicBarrier 可循环的屏障,它要做的事情是让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续生活,线程进入屏障CyclicBarrier的await()方法。 一个线程组的线程需要等待所有线程完成任务后再继续执行下次
阅读全文
浙公网安备 33010602011771号