Java
文章平均质量分 83
云淡风qin
这个作者很懒,什么都没留下…
展开
-
synchronized和lock的原理解读以及它们的区别?
对实例变量更改的场合,刷新主内存共享变量的值从而使得各个 线程可以获得最新的值,线程读取变量的值需要从主存中读取;另外,synchronized还会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中(即释放锁前),从而保证 了操作的内存可见性,同时也使得先获得这个锁的线程的所有操作。:处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证各个语句的执行顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。2、该变量没有包含在具有其它变量的不变式中。原创 2023-05-01 18:13:39 · 127 阅读 · 0 评论 -
JVM常用垃圾收集器及GC算法
G1 收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据所允许的收集时间,优先回收垃圾最多的区域。(与Serial Old不同,这里的整理是Summary(汇总)和Compact(压缩),汇总的意思就是将幸存的对象复制到预先准备好的区域,而不是像Sweep(清理)那样清理废弃的对象)算法,在Parallel Old执行时,仍然需要。串行收集器是最古老,最稳定以及效率高的收集器,使用停止复制方法,只使用一个线程去串行回收;原创 2023-04-29 18:49:26 · 462 阅读 · 0 评论 -
Java对象内存布局
创建一个User对象,内存分配在堆上Object obj;创建一个引用,内存分配在栈上= 将Object 对象地址赋值给引用- XX : + UseCompressedOops 开启指针压缩 - XX : - UseCompressedOops 关闭指针压缩未开启指针压缩 占用大小为:8(Mark Word)+8(Class Pointer)=16字节。原创 2023-04-28 21:30:08 · 56 阅读 · 0 评论 -
JVM 运行时内存之堆的内存分布
指内存的永久保存区域,主要存放 Class 和 Meta(元数据)的信息,Class 在被加载的时候被放入永久区域,它和和存放实例的区域不同,GC 不会在主程序运行期对永久区域进行清理。所以这也导致了永久代的区域会随着加载的 Class 的增多而胀满,最终抛出 OOM 异常。首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果 ServicorTo 不够位置了就放到老年区);原创 2023-04-27 21:26:46 · 93 阅读 · 0 评论 -
数据结构之数组理论基础及常用算法
问题描述:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0。原创 2023-04-26 22:04:50 · 111 阅读 · 0 评论 -
JVM内存模型以及 Java对象内存分配策略
在JDK1.8时方法区(Method Area)被替换JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、 Execution engine(执行引擎);两个组件为Runtime data area(运行时数据 区)、Native Interface(本地接口)。原创 2023-04-26 11:10:38 · 224 阅读 · 0 评论 -
线程同步之读写者问题Java代码实现
读者写者问题:存在一个多个进程共享的数据区(临界资源),该数据区可以是一个文件或者一块内存空间,甚至可以是一组寄存器;有些进程reader只读取这个数据区的数据,有些进程writer只往数据区中写数据。也即是说,读进程不排斥其它读进程,而写进程排斥其它所有进程,包括读进程和写进程。3.若一个写进程正在写文件,则禁止任何读进程读文件。4.读者优先:必须等所有读进程读完才可以写。1.任意数量的读进程可以同时读这个文件。2.一次只能有一个写进程可以写这个文件。原创 2023-04-25 17:20:41 · 98 阅读 · 0 评论 -
线程同步之生产者-消费者模式Java代码实现
生产者-消费者模式Java代码实现,消费队列可以用来平衡生产和消费的线程资源。原创 2023-04-25 16:05:55 · 344 阅读 · 0 评论 -
JVM的类加载机制及双亲委派模型
JVM的类加载机制和双亲委派模型原创 2023-04-21 17:02:32 · 146 阅读 · 1 评论 -
Redis集群的三种部署方式及三种应用问题和解决
穿透:缓存不存在,数据库不存在,高并发,少量key击穿:缓存不存在,数据库存在,高并发,少量key雪崩:缓存不存在,数据库存在,高并发,大量key。原创 2023-04-20 22:50:15 · 525 阅读 · 1 评论 -
HashMap在JDK1.7和JDK1.8中有哪些不同? HashMap的put()底层实现
put()操作流程及图解原创 2023-04-19 22:13:06 · 92 阅读 · 1 评论