
Java
Java一些相关知识点介绍总结
北堂桓禧
好记性不如烂笔头,不记录下来都不是你的
展开
-
并发-CountedCompleter详解
CountedCompleter维护两个动作:onCompletion)和onExceptionalCompletionCountedCompleter维护父任务变量completer,通过这个变量逐级传递上去CountedCompleter维护挂起任务(子任务)的计数(pending),子任务完成会触发父任务的pending减1作为ForkJoinTask,compute之后并没有将状态置为Normal,如果此时调用join会阻塞线程原创 2020-03-01 16:26:44 · 1508 阅读 · 0 评论 -
ForkJoin框架详解 一张图搞明白工作窃取(work-stealing)机制
ForkJoinPool一种ExecutorService的实现,运行ForkJoinTask任务,它采用了一种工作窃取(work-stealing)的机制。维护了WorkQueue的数组(2的整数次方),每个workQueue都有任务队列,并且用base、top指向任务队列队尾和队头。ctl 是ForkJoinPool的主要控制字段,ctl不同的bit位表示不同的含义。ForkJoinWorkerThreadFactory则是用来创建工作线程。原创 2020-02-23 13:51:03 · 5266 阅读 · 5 评论 -
内存分析工具(MAT)介绍(三)-mat histogram
MAT的直方图展示了当前dump文件每个类的对象数量、占用的shallow heap 和 retained heap。在直方图这个页面,用户可以做很多的分析操作。如何进入直方图 鼠标左击工具栏的直方图图标即可进入直方图页面。最开始Retained Heap是没有计算的,我们可以点击工具栏计算图标计算。有两种选择:计算最小的Retained...原创 2020-02-13 09:28:35 · 2200 阅读 · 0 评论 -
内存分析工具(MAT)介绍(二)-mat主要概念
Shallow Heap是一个对象占用的堆内存;一个对象X的Retained Set是指因对象X被垃圾回收而被回收的对象集合;对象X控制(dominates)对象Y是指从GC Root对象到达对象Y的所有路径一定经过对象X,对象X称为对象Y的控制者(dominator)。如果是对象X是距离对象Y最近的控制者,则称为immediate dominator原创 2020-02-10 20:55:44 · 948 阅读 · 0 评论 -
内存分析工具(MAT)介绍(一)-入门
MAT即Memory Analyse Tool 是java内存分析的利器。基于这个工具,我们可以分析定位很多疑难问题。dump一份jvm内存文件下来:jmap -dump:format=b,file=heapdump.phrof pid。原创 2020-02-09 19:59:44 · 866 阅读 · 0 评论 -
【JAVA】CompletableFuture笔记及关键源码解读-CompletionStage异步计算实现
CompletableFuture是CompletionStage实现类,表达的语意是:当一个CompletionStage完成之后触发另一个CompletionStage的执行。CompletionStage的机制构造具有相对顺序的执行链条,终点CompletionStage的完成(正常/异常)会触发直接依赖他的一批Completion完成 thenAppy/thenAccept/thenRun构建不同类型的CompletionStage原创 2020-09-19 21:41:53 · 1033 阅读 · 0 评论 -
@Repeatable详解-getAnnotation、getDeclaredAnnotation获取不到对象
dk8之前不存在可重复注解,如果想添加多个相同注解,只能用容器注解。jdk8引入了@Repeatable元注解。被@Repeatable修饰的注解即是可重复使用在同一个元素上的。getAnnotation、getAnnotations、getAnnotationsByType、getDeclaredAnnotation、getDeclaredAnnotations()、getDeclaredAnnotationsByType这些方法获取的都是运行时注解原创 2020-03-11 00:31:56 · 15339 阅读 · 1 评论 -
java原生SPI机制详解
SPI也是如此,SPI全称Service Provider Interface。本质就是上层软件制定所需模块的接口规范,然后基于这个规范搭建上层建筑,至于模块谁来开发实现并不关心,反正厂商按照接口规范做出来就好。SPI的核心是java.util.ServiceLoader。ServiceLoader大致的过程是在classpath*:META-INF/services/目录下查找配置文件(名称是接口的全路径类名),这个文件里面每一行就是是实现类的全路径类名。原创 2020-03-07 11:22:52 · 464 阅读 · 0 评论 -
java8 双冒号(::)使用方法
双冒号(::)运算符是跟函数式接口相关的运算符,作为函数式接口的赋值操作。双冒号用于静态方法 使用方法:将类的静态方法赋值给一个函数式接口,静态方法的参数个数、类型要跟函数式的接口一致。调用这个函数式接口就相当于调用静态方法。格式ClassName::MethodName 自定义一个函数式接口如下:@FunctionalInterfacepublic inter...原创 2020-02-29 11:51:24 · 2794 阅读 · 0 评论 -
【Java】深入理解动态代理:JDK、CGLIB
代理模式 日常生活中代理司空见惯的,比如某地区总代理,直白点就是中间商。在代码的世界里也有这种“中间商”,不过这个“中间商”不收差价,有时候甚至给你点额外的小惊喜。...原创 2020-08-09 00:25:25 · 314 阅读 · 0 评论