![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 70
m1f2c3
这个作者很懒,什么都没留下…
展开
-
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 · 159 阅读 · 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 · 421 阅读 · 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 · 2698 阅读 · 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 · 159 阅读 · 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 · 709 阅读 · 0 评论 -
日志jar包引发的StackOverflow
问题描述在xqp上部署之后报StackOverFlow错误。根据localhost-2020-12-31.log初步判断是日志有关的jar包循环调用导致的。但是奇怪的是线上没有问题,有些xqp机器也没问题。后来在网上查阅资料发现这是由于jar加载顺序不同导致的。分析以log4j-1.2.17和log4j-over-slf4j-1.7.14这两个包为例,如果jvm先加载log4j-1.2.17后加载log4j-over-slf4j-1.7.14就不会出现递归调用,也不会出现StackOverflow。反原创 2021-01-02 11:12:44 · 469 阅读 · 2 评论 -
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 · 316 阅读 · 1 评论 -
netty Recycler(三)WeakOrderQueue unreachable
由于线上问题是由大量的WeakOrderQueue$Link对象引起的,而这些对象都是unreachable,为了研究线上问题的原因,尝试重新构建出WeakOrderQueue$Link的unreachable。目前已构建出WeakOrderQueue的unreachable(有些成员变量是私有的,不好获取,目前只能获取到WeakOrderQueue层次。以后通过反射的方法应该可以获取到Link)。package study.recycler.again;import io.netty.util..原创 2020-12-13 11:32:43 · 416 阅读 · 0 评论 -
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 · 452 阅读 · 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 · 430 阅读 · 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 · 144 阅读 · 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 · 423 阅读 · 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 · 462 阅读 · 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 · 193 阅读 · 0 评论 -
动态代理
代码:https://github.com/shangjianan2/testGglib原创 2020-11-27 08:28:07 · 63 阅读 · 0 评论 -
netty Recycler(一)
此文章是研究netty过程中的记录,很有可能有很多不对的地方,欢迎指正之所以研究netty Recycler,是因为生产环境中遇到了由其引发的堆内存占用率过高的现象。实验所用源码回收对象分为两种:同一线程 不同线程。同一线程在同一线程中,对象回收至Recycler$Stack中实验代码package test.recycler;import io.netty.util.Recycler;import io.netty.util.concurrent.FastThreadLocalTh.原创 2020-11-22 10:51:33 · 643 阅读 · 0 评论 -
netty缓存引起的堆内存使用率过高
问题现象原因解决方案方案一:重启应用。这个方案治标不治本。重启应用的过程中可能会遇到一些问题,可以参考:jdos应用重启提示“jsf部分标识上线”。方案二:既然是netty缓存造成的问题,禁用缓存就可以了。方案三:配置gc参数-XX:+UseConcMarkSweepGC //开启cms gc-XX:CMSInitiatingOccupancyFraction=80 //老年代占用80%时进行full gc-XX:+UseCMSInitiatingOccupancyOnly //让cms原创 2020-11-22 09:20:50 · 1585 阅读 · 2 评论 -
推荐文章
java字节码http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.htmlhttps://www.jrebel.com/blog/using-objects-and-calling-methods-in-java-bytecode原创 2020-10-15 08:26:32 · 78 阅读 · 0 评论 -
基于JDK命令行工具的监控
一、JVM参数类型参考https://docs.oracle.com/javase/8/docs/technotes/tools/unix/https://mp.weixin.qq.com/s/GsxeFM7QWuR–Kbpb7At2w1.1 标准参数一些基本的参数,这些参数在大多其他命令行工具中也会用到-help-server -client-version -showversion-cp -classpath1.2 X参数非标准化参数-Xinit: 解释执行-Xco原创 2020-09-26 17:43:24 · 123 阅读 · 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 · 7241 阅读 · 0 评论 -
SpringBoot部署
springboot框架下的程序在idea中可以正常运行之后,需要发布。主要参照官方文档、statckoverflow以及github。1、官方文档官方文档中介绍了如何将程序打包成jar但是当我按照文档中的说明配置pom.xml文件时,运行mvn package时总是出错(由于windows下cmd中能存放的输出太少了,此时此刻我已经找不到之前的错误信息了,所以不能截屏了)。Failed...原创 2020-01-09 16:38:01 · 413 阅读 · 0 评论 -
jvm
观看JVM虚拟机底层原理分析与性能优化【图灵学院】时记的笔记jvm内存模型年轻代:老年代=1:2eden:from:to=8:1:1from和to中的对象循环15次之后进入老年代老年代满了做full gc,会停止所有业务线程运行。调优的目的:减少full gc老年代full gc之后还是满的,程序就会死掉。...原创 2019-08-09 10:01:06 · 111 阅读 · 0 评论 -
井盖程序中获取电信推送数据的java代码
UserInfo.javapackage com.huawei.com;import java.io.IOException;import java.io.PrintStream;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;im...原创 2019-06-04 18:07:57 · 266 阅读 · 2 评论 -
IntelliJ IDEA安装及破解
转自:https://blog.csdn.net/qq1404510094/article/details/79005826转载 2019-06-03 20:10:34 · 2746 阅读 · 0 评论