![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java底层知识
文章平均质量分 86
L# S@
这个作者很懒,什么都没留下…
展开
-
单例设计模式
模式定义保证一个类只有一个实例,并且提供一个全局访问点场景重量级的对象,不需要多个实例,如线程池,数据库连接池。结构提供了一个私有的属性提供了一个私有的构造函数提供了一个全局访问点具体实现懒汉模式延迟加载,只有在真正使用的时候,才开始实例化。类似于懒加载线程安全问题double check 加锁优化编译器,CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字进行修饰,对于volatile修饰的字段,可以防止指令重排例子单线程publ原创 2020-05-29 23:54:40 · 212 阅读 · 1 评论 -
ReentrantLock底层相关原理笔记
synchronized 重量级的锁 会去调用操作系统的函数(1.6) JVM级别(1.7)阻塞操作 就是 让出CPUwait(完成线程通信)和notifyall关键字一起使用轻量级锁:底层调用Java代码(jdk)重量级锁:底层调用os的函数(1.6之前)整个AQS队列中的队头 Thread永远为null(空)持有锁的线程不在这个队列当中。交替执行:速度快 没有堵塞 没有队列的产生 jdk级别单个线程–交替执行它其实和队列无关–jdk级别解决同步问题ReentrantLock 和原创 2020-05-18 14:44:06 · 675 阅读 · 0 评论 -
JMM与volatile关键字
Java线程内存模型跟CPU缓存模型类似,是基于CPU缓存模型来建立的,Java的线程内存模型是标准化的,屏蔽了底层不同计算机的区别。JMM数据原子操作read(读取):从主内存读取数据load(载入):将主内存读取到的数据写入工作内存中user(使用):从工作内存读取数据来计算assign(赋值):将计算好的值重新赋值到工作内存中store(存储):将工作内存数据写入主内存write(写入):将store过去的变量值赋值给主内存中的变量lock(锁定):将主内存变量加锁,标识为线程独占原创 2020-05-15 21:40:28 · 195 阅读 · 0 评论 -
JVM底层原理与性能调优
JVM底层栈又叫线程栈 是用来放局部变量的 以下面的这个类为例math就是个局部变量 a b c也是 放在栈内存空间中public class Test { public static final int a=100; public static User user=new User(); public int math(){ int a...原创 2020-05-01 01:11:59 · 420 阅读 · 0 评论 -
Java的堆与栈
堆与栈Java将内存分为两种,一种叫做堆内存,一种叫栈内存。在函数中定义的一些基本类型和对象的引用都是在栈内存中分配的。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另做他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生...转载 2019-11-28 18:09:59 · 97 阅读 · 0 评论