![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 51
KD_
这个作者很懒,什么都没留下…
展开
-
并发编程 - lost wakeup
Java中wait()方法为什么要放在同步块中?(lost wake-up 问题):https://www.cnblogs.com/sunweiye/p/11055550.htmllost wakeup问题sleep 和 wakeup使用于等待某事发生,用于阻塞和唤醒线程的情形中。所以sleep的使用逻辑是:检查状态,不符合则调用sleep阻塞当前线程;wakeup的使用逻辑是:改变状态,调用wakeup唤醒对应线程。lost wakeup问题:(1)线程1首先检查状态,发现不符合。(2)线程2改原创 2022-04-02 21:15:41 · 724 阅读 · 2 评论 -
Memory ordering - 内存屏障
CPU缓存会导致两个关于内存的并发问题:可见性有序性可见性描述的是多个线程的问题,一个线程修改变量之后,另一个线程却无法查看变量最新值的问题。有序性描述的是一个线程的问题,一个线程内的读写操作发送了重排序。但是这个现象一定是通过另外一个线程观察到的,因为对于同一个线程具有as-if-serial的性质。有序性问题可分为两大类:编译重排序和CPU指令并行执行重排序:指令的执行顺序在物理时间上发生了真正意义上的的重排序,即代码上位于后面的指令,却先执行了。CPU读写缓冲区重排序:指令的执行顺原创 2022-03-06 21:35:43 · 385 阅读 · 0 评论 -
对于JAVA GC的理解
GC root所谓“GC roots”,或者说tracing GC的“根集合”,就是一组必须活跃的引用。注意,是一组必须活跃的引用,不是对象。而且对于年轻代GC,GC ROOT必须是年轻代对象的引用。对于老年代GC, GC ROOT必须是老年代对象的引用。GC root枚举以young gc为例(old gc同理):在进行gc trace之前,必须对gc root进行枚举,保证年轻代里所有存活的对象都能被标记到。JVM使用OoMap记录了负责记录堆外对堆内的引用,遍历OoMap,将其中属原创 2022-02-21 13:20:31 · 289 阅读 · 0 评论 -
C++解释器、模板解释器和JIT的一些认识
解释执行:包括C++解释器和模板解释器。解释执行并不是每次执行字节码时动态把它编译成机器码,而是将根据字节码的类型,转到对应的机器码去执行,即一个派发(switch)的过程。而C++解释器派发到的是由字节码对应的C++代码所编译成的机器码,模板解释器派发到的是字节码对应的汇编模板所生成的机器码。由于C++代码由编译器编译成机器码,比较冗余,所以执行速度慢,而模板解释器的汇编模板是直接由汇编代码专门编写的,执行效率高。所以解释执行执行速度较慢,并不是每次将字节码动态编码生成机器码的原因,这是错误的。而是对..原创 2021-11-24 17:01:27 · 1214 阅读 · 0 评论 -
Java 文件操作
Java 文件 IO 操作之 DirectIO文件 IO 操作的一些最佳实践PolarDB 数据库性能大赛 Java 选手分享原创 2021-09-14 14:30:45 · 76 阅读 · 0 评论 -
JAVA异或交换数组元素返回0的坑
使用异或交换数组中的两个元素,当i = j时,交换之后inputs[i] = input[j] = 0。这是因为第一步inputs[i] = inputs[i] ^ inputs[j],因为inputs[i] = inputs[j],所以inputs[i] = 0。因为i=j,所以同时inputs[j] = inputs[i] = 0,所以最后结果都为0;inputs[i] = inputs[i] ^ inputs[j];inputs[j] = inputs[i] ^ inputs[j];原创 2020-07-01 15:22:04 · 246 阅读 · 0 评论 -
JAVA 接口与接口、接口与父类之间方法同名
文章目录接口成员的特点java8接口变化静态方法的特性接口和父类的方法重名1. 接口:抽象方法,父类:成员方法2. 接口:默认方法,父类:成员方法3. 接口:静态方法,父类:成员方法4. 接口:抽象方法,父类:静态方法5. 接口:默认方法,父类:静态方法6. 接口:静态方法,父类:静态方法总结:实现的多个接口中有同名方法1. 两者均是抽象方法2.一个为抽象方法,一个为默认方法3. 两者均是默认方法4. 一个或者两个为静态方法5. 将某一个接口替换为抽象类总结方法重名总结父类子类实现同一个接口接口成员的特原创 2020-06-23 16:57:37 · 2263 阅读 · 4 评论 -
ThreadLocal底层原理以及内存泄漏
文章目录基本原理Set过程get过程为什么要使用WeakReference基本原理每一个线程Thread中都有一个变量ThreadLocalMap。ThreadLocal的全部操作都是基于Thread. ThreadLocalMap进行操作的。ThreadLocalMap是一个Entry数组,Entry储存Key(WeakReference<ThreadLocal<?>>)和Value(Object)。Set过程根据当前线程Thread获取其内部的ThreadLo原创 2020-06-13 10:00:05 · 258 阅读 · 0 评论 -
Java 垃圾回收算法和垃圾回收器
文章目录根搜索算法强引用、软引用、弱引用、虚引用垃圾回收算法标记清楚算法复制算法标记-整理算法分代收集算法垃圾收集器垃圾收集器的并行与并发新生代收集器Serial收集器ParNewParallel Scavenge老年代垃圾收集器Serial OldParallel OldCMSG1收集器垃圾收集器参数根搜索算法Java进行垃圾回收主要面对的区域为堆区域。所以垃圾回收时首先需要判断堆上的对象是...原创 2020-04-07 19:45:39 · 269 阅读 · 0 评论 -
java 从JVM底层解析桥方法
概述关于桥方法看了很多文章,但是大多都只解释了桥方法的现象,并没有解释为什么要有桥方法。所以本文从jvm底层原理阐述,为什么要有桥方法。JVM 底层原理栈帧栈帧是用于支持虚拟机进行方法调用和执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧储存着方法的局部变量表、操作数栈、动态连接、和方法返回地址等信息。每一个方法从调用到执行完成的过程,就对应着一个栈桢在虚拟机里面从入栈到出...原创 2020-03-12 14:57:41 · 252 阅读 · 1 评论