源码
文章平均质量分 67
m1f2c3
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用火焰图分析org.apache.commons.beanutils.BeanUtils
一、Java Flight Recorder参考:https://blog.youkuaiyun.com/qq_37552993/article/details/102545780配置之后让测试程序运行五分钟,得到下面这张图二、分析耗时原因2.1 isReadable isWriteable每次copy时会对每个字段的可读性和可写性进行重复判断,而由于在复制过程中类的结构一般不会改变,所以这俩状态应该被缓存下来。结论来源:https://blog.youkuaiyun.com/u010209217/article/原创 2021-10-04 12:06:08 · 6410 阅读 · 0 评论 -
AQS & ReentrantLock & CountDownLatch
主要参考文章https://javadoop.com/2017/06/16/AbstractQueuedSynchronizer/首先介绍AQS基本原理,然后介绍AQS在ReentrantLock和CountDownLatch上的应用AQS概述AQS全程是AbstractQueuedSynchronizer,顾名思义是一个基于队列的同步器。底层使用LockSupport.park和LockSupport.unPark实现对线程的挂起和唤醒。如果使用了condition,情况就会稍微有些复杂.原创 2021-07-25 10:55:20 · 230 阅读 · 0 评论 -
netty服务端启动时的线程创建
唤醒主线程时的调用堆栈notifyAll:-1, Object (java.lang)setSuccess0:501, DefaultPromise (io.netty.util.concurrent)setSuccess:389, DefaultPromise (io.netty.util.concurrent)setSuccess:76, DefaultChannelPromise (io.netty.channel)setSuccess:71, DefaultChannelPromise (原创 2021-02-09 11:44:04 · 503 阅读 · 0 评论 -
netty 接收数据 发送数据
代码如下。服务端是一个echo服务。程序中client和server都有读写操作,且两者的读写操作调用的底层结构相同。package com.tcp;import io.netty.bootstrap.Bootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.chann原创 2021-01-17 11:30:11 · 3121 阅读 · 2 评论 -
CompletableFuture
测试代码package com.test;import java.util.concurrent.CompletableFuture;public class testFuture { public static void main(String[] args) throws Exception { CompletableFuture<Object> result = CompletableFuture.supplyAsync(testFuture::fun);原创 2021-01-16 10:47:29 · 216 阅读 · 0 评论 -
Tomcat类加载器调用顺序研究
网上很多资料(包括官方文档)都说有common、system这些类加载器。但是我调试源码的时候并没有看到这些类加载器。tomcat version:8.5.42本文研究两个问题。1、JAVA_HOME/lib/ext和/WebApp/WEB-INF/lib中有相同全限定类名时,加载谁的类。答:前者2、加载类的过程中classloader的大致调用过程。WebappClassLoaderBase(tomcat的)->ExtClassLoader->BootStrapClassLoader.原创 2021-01-10 11:00:52 · 973 阅读 · 0 评论 -
netty Recycler(四) 多线程回收对象时竞争机制的解决
假设线程1创建了大量对象,线程2和线程3同时回收线程1的对象,当这两个线程第一次回收对象时会创建WeakOrderQueue,并将其添加到线程1的Stack。多个线程操控一个Stack,这就造成了竞争。那么netty是如何解决竞争?代码package study.recycler.again;import io.netty.util.Recycler;import java.util.concurrent.ConcurrentLinkedQueue;/** * 断点2 主线程回收池中会有大原创 2020-12-16 08:46:20 · 452 阅读 · 1 评论 -
netty Recycler(二)——WeakOrderQueue和Stack
之前一直搞不清楚WeakOrderQueue的用途,“将别的线程的对象回收到本线程"还是"将别的线程的对象回收到别的线程”(前者是对的)。所以研究了一下package study.recycler.again;import io.netty.util.Recycler;import java.util.concurrent.ConcurrentLinkedQueue;public class CycliMutiThread { private static final Recycl.原创 2020-12-12 18:56:53 · 590 阅读 · 1 评论 -
dubbo rpc NettyClient连接
consumer获取channelNettyChannel.CHANNEL_MAP(静态变量)中存储着channel。/** * the cache for netty channel and dubbo channel */ private static final ConcurrentMap<Channel, NettyChannel> CHANNEL_MAP = new ConcurrentHashMap<Channel, NettyChannel&g原创 2020-12-06 12:21:18 · 547 阅读 · 0 评论 -
dubbo rpc consumer 发送数据
write:1391, DefaultChannelPipeline$HeadContext (io.netty.channel)//调用了io.netty.channel.Channel#Unsafe中的write方法,NettyClientWorker-4-1这个线程中运行invokeWrite0:738, AbstractChannelHandlerContext (io.netty.channel)invokeWrite:730, AbstractChannelHandlerContext (i原创 2020-12-06 09:22:28 · 206 阅读 · 0 评论 -
dubbo rpc consumer 接收数据
分析dubbo与netty之间通过一个BlockQueue传输数据一个是主线程([main,5,main]),通过调用threadlessExecutor.waitAndDrain()从一个LinkedBlockingQueue中获取数据。另一个是netty的线程([NettyClientWorker,优先级不知道,main]),将数据存入LinkedBlockingQueue中。主线程尝试获取数据堆栈 主线程尝试从队列中获取数据waitAndDrain:89, ThreadlessExecut原创 2020-12-06 08:48:59 · 523 阅读 · 0 评论 -
spring源码——事件监听器(注解方式)
代码:https://github.com/shangjianan2/NormalTechnology.gitEventListener使用定义事件需要继承ApplicationEventpackage com.ework.upms.server.event;import lombok.Getter;import lombok.Setter;import lombok.ToString;import org.springframework.context.ApplicationEvent原创 2020-11-29 10:34:13 · 556 阅读 · 2 评论 -
spring源码分析——注解
代码:https://github.com/shangjianan2/NormalTechnology.git自定义注解定义注解package com.ework.upms.server.annotation;import java.lang.annotation.*;@Documented@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface原创 2020-11-29 10:14:55 · 253 阅读 · 0 评论 -
@SpringBootTest注解分析(一)Found multiple @SpringBootConfiguration annotated classes
Spring版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE...原创 2020-04-19 11:54:12 · 7715 阅读 · 0 评论
分享