- 博客(200)
- 资源 (2)
- 收藏
- 关注
原创 【jdk17-AbstractQueuedSynchronizer翻译】
类说明提供了一个实现阻塞锁及相关同步器(信号量(semaphores)、事件(events)等)的框架,这些同步器依赖于先进先出(FIFO)等待队列该类主要为了大多数同步器的有用的基础工具而设计,这些同步器基于一个表征状态(represent state)的单个原子int值。子类必须定义改变该状态的受保护(protected)方法,并且定义该状态在对象被获取或释放时的意义。给定这些方法,此类中的其他方法负责所有的排队和阻塞机制。子类可以维护其他状态字段,但只有使用 #getState、#setState
2024-12-02 16:32:06
409
原创 AtomicIntegerFieldUpdater能否降低内存
AtomicIntegerFieldUpdaterTest整个对象大小的和为32M,相比之前的总共小了64M。大大的减少了内存的开销。而AtomicIntegerTest对象实例整个占用了96M.AtomicIntegerFieldUpdater必须是静态变量。被更新的变量必须被关键字volatile修饰。
2024-11-30 13:40:01
610
原创 JOL使用样例02-照搬官网
为了演示这一点,我们首先需要休眠超过5秒,以通过偏向锁的宽限期。你可能会注意到,在第一次锁释放后,标记字没有改变,仍然保留了偏向。身份哈希码的计算会覆盖偏向锁的信息,后续的锁只会暂时移位。除了检查对象的内部结构外,我们还可以查看对象的外部引用,即从所讨论的对象引用的其他对象。可以看到,许多数组实际上占用相同的空间,因为它们也需要外部对齐。内部对齐可以在某些特定的虚拟机模式下进行演示,例如在32位模式下的。当多个根对象传递给 JOL 时,它会跟踪从任一根对象可达的对象,并且避免重复计数。
2024-11-28 15:16:55
354
原创 jdk17-LongAddr 类increment()方法注释说明
increment() 方法如下: /** * Equivalent to {@code add(1)}. */ public void increment() { add(1L); }成员变量如下 /** Number of CPUS, to place bound on table size */ static final int NCPU = Runtime.getRuntime().availableProcessor
2024-11-26 16:41:10
140
原创 jdk-VarHandle 翻译
VarHandle 是一种动态强类型的对变量的引用,或者对一组参数化定义的变量的引用,包括静态字段、非静态字段、数组元素或离堆数据结构的组件。对这些变量的访问支持多种 访问模式(access modes),包括普通的读/写访问、volatile 读/写访问以及比较并设置(compare-and-set)。VarHandle 是不可变的,没有可见的状态。用户不能对 VarHandle 进行子类化。
2024-11-22 16:43:07
425
原创 【jdk-CompletionStage翻译】
另一种形式(compose)允许从返回 CompletionStage 的函数构建计算管道。任何传递给一个阶段计算的参数都是触发该阶段计算的结果。
2024-11-13 09:56:51
630
原创 jdk-future翻译
Future 表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。只有在计算完成后才能使用 get 方法检索结果,必要时会阻塞直到结果准备好。取消操作由 cancel 方法执行。还提供了额外的方法来确定任务是正常完成还是被取消。一旦计算完成,就无法再取消。如果你希望使用 Future 以实现可取消性但不提供可用的结果,可以声明形式为 Future<?> 的类型,并在底层任务中返回 null 作为结果。}}
2024-11-12 11:14:25
152
原创 jdk-Condition翻译
5. 请注意,Condition 实例只是普通的对象,它们可以作为 synchronized 语句的目标,并且可以调用它们自己的监视器方法,如 Object#wait 和 Object#notify。为了避免混淆,建议你永远不要以这种方式使用 Condition 实例,除非可能是在它们自己的实现中。4. Condition 接口的实现可以提供与 Object 监视器方法不同的行为和语义,例如保证通知的顺序,或者在执行通知时不需要持有锁。
2024-11-11 11:30:02
1039
原创 【线性回归】
根据double[] x 和 double[] y ,计算y = ax + b中a和b的值。最小二乘法:让距离(实验值和理论值的差值)的平方和最小。对a和b求偏导数,取偏导数为0,可以求解得到a和b。求f(a,b)的最小值,即。
2024-05-09 13:49:08
904
原创 scala05-函数式编程01
/ (1)函数1:无参,无返回值println("1. 无参,无返回值")f1()// (2)函数2:无参,有返回值println("2. 无参,有返回值")return 12// (3)函数3:有参,无返回值println("3:有参,无返回值 " + name)// (4)函数4:有参,有返回值println("4:有参,有返回值 " + name)// (5)函数5:多参,无返回值println("5:多参,无返回值")println(s"${name1。
2024-03-28 17:19:34
396
原创 数据结构-树
树存储不同于数组和链表的地方在于既可以保证数据检索的速度,又可以保证数据插入删除修改的速度,二者兼顾。二叉树是一种很重要的数据结构,是非线性的结构,非常多其他数据结构都是基于二叉树的基础演变而来的。如:一般二叉树、完全二叉树、满二叉树、线索二叉树、哈夫曼树、二叉排序树、平衡二叉树、红黑树、B树。普通的二叉树,很难构成现实的应用场景,但因其简单,常用于学习研究,平衡二叉树则是实际应用比较多的。常见于快速匹配、搜索等方面。常用的树有:AVL树、红黑树、B+树、Trie(字典)树。
2023-11-24 13:20:07
287
原创 JVM在线分析-监控工具(jps, jstat, jstatd)
t:可以在打印的列加上Timestamp列,用于显示系统运行的时间。-h:可以在周期性数据输出的时候,指定输出多少行以后输出一次表头。Compiled:最近编译方法的数量。Size:最近编译方法的字节码数量。Type:最近编译方法的编译类型。YGCT:年轻代垃圾回收消耗时间。FGCT:老年代垃圾回收消耗时间。YGCT:年轻代垃圾回收消耗时间。FGCT:老年代垃圾回收消耗时间。FGCT:老年代垃圾回收消耗时间。FGCT:老年代垃圾回收消耗时间。FGCT:老年代垃圾回收消耗时间。
2023-11-08 19:17:49
831
原创 JAVA对象大小的获取
在64位的HotSpot虚拟机下,Mark Word占8个字节,其记录了Hash Code、GC信息、锁信息等相关信息;而Class对象指针则指向该实例的Class对象,在开启指针压缩的情况下占用4个字节,否则占8个字节;在64位的HotSpot虚拟机下,类型指针、引用类型需要占8个字节。64位的HotSpot要求Java对象地址按8字节对齐,即每个对象所占内存的字节数必须是8字节的整数倍。Java的实例对象、数组对象在内存中的组成包括如下三部分:对象头Hearder、实例数据、内存填充。
2023-11-06 13:02:37
1147
原创 JVM线上问题排查基本操作
1. 查看是否存在死循环, 根据业务进行修复2. C2 编译器执行编译时也会抢占 CPU, 什么是 C2编译器呢?当 Java 某一段代码执行次数超过10000次(默认)后,就会将该段代码从解释执行改为编译执行,也就是编译成机器码以提高速度。而这个 C2编译器就是做这个的。如何解决呢?项目上线后,可以先通过压测工具进行预热,这样,等用户真正访问的时候,C2编译器就不会干扰应用程序了。3. GC 线程导致的,那么极有可能是 Full GC ,那么就要进行 GC 的优化以上是基本操作,仅供参考。
2023-11-04 14:25:24
555
原创 JVM离线分析-使用MAT分析dump堆文件
官方介绍简要说明:MAT用来分析jvm的内存信息,内存信息包含两方面对 dump 文件建立多种索引,并基于索引来实现内存分布、对象间依赖、对象状态、条件检索这四大核心功能,并通过可视化展现辅助 Developer 精细化了解 JVM 堆内存全貌。分析堆文件MAT的直方图和jmap的-histo命令一样,都能够展示各个类的实例数目以及这些实例的Shallowheap总和with outgoing references:此对象引用了哪些对象,with incoming references:此对象被谁引
2023-11-04 11:50:37
2904
原创 JVM内存结构说明
方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),这也是Java强大的扩展能力,在运行期间才能确定目标方法的直接引用。方法区是JVM规范概念,而永久代则是Hotspot虚拟机特有的概念,简单点理解:方法区和堆内存的永久代其实一个东西,但是方法区是包含了永久代。所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用。如果正在执行的是Native方法,计数器的值则为空(undefined)
2023-11-04 11:28:18
169
原创 OOM内存溢出的原因总结
OOM是Out of Memory的缩写,意思是内存溢出。它是指程序在申请内存时,系统可分配的内存已不足,从而导致程序运行失败。
2023-11-01 14:06:54
701
原创 【OOM-笔记】
OOM,全称“Out Of Memory”,意思就是“内存用完了”,详细说明:当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)ObjectThrowableError。
2023-10-18 15:59:53
158
原创 tomcat架构概览
处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。加载和管理 Servlet,以及具体处理 Request 请求。因此 Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。NIO:非阻塞 I/O,采用 Java NIO 类库实现。NIO.2:异步 I/O,采用 JDK 7 最新的 NIO.2 类库实现。
2023-09-16 11:35:40
805
原创 opencv03-补充-vector的操作
public :private :// 存放自定义类 vector < string > v3;//注意空格。这里相当于二维数组int a[n][n];//列表初始化,注意使用的是花括号 vector < string > v6 = {//初始化为-1,-1,-1,-1,-1。第一个参数是数目,第二个参数是要初始化的值 vector < string > v8(3 , "hi");//默认初始化为0 vector < int > v10(4);
2023-08-01 10:13:54
219
原创 opencv02-图像加载、显示、修改和保存
7 带 TIFF 编码器,8 位无符号 (CV_8U),16 位无符号 (CV_16U),可以保存 32 位浮点 (CV_32F) 和 64 位浮点 (CV_64F) 图像。使用 PNG 编码器,可以保存 8 位无符号 (CV_8U) 和 16 位无符号 (CV_16U) 图像, 可以使用此功能保存带有 alpha 通道的 PNG 图像。如果转化添加了 alpha 通道,则其值将设置为相应通道的最大值. 范围:CV_8U是255,CV_16U是65535,CV_32F是1。在保存之前对其进行转换。
2023-07-31 10:34:46
364
原创 Windows11+Opencv+Clion编译源码
选择选择 opencv 下的 mingw_build文件夹。编译(8为核心数,请自行调整),编译速度大概10分钟左右。分别选择刚刚下载的posix版本MinGW-W64下的。选择选择 opencv 下的 sources文件夹。如遇到一下问题,请打开下面的文件。这里使用的tag为4.8.0。加入环境变量中的path中。命令将编译生成的文件整合到。
2023-07-30 13:30:56
1476
C++核心编程.xmind
2021-03-29
C++ 基础入门篇.xmind
2021-03-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人