- 博客(22)
- 资源 (1)
- 问答 (30)
- 收藏
- 关注
原创 Netty源码分析-PoolChunk
上图中是一个默认大小的chunk, 由2048个page组成了一个chunk,一个page的大小为8192, chunk之上有11层节点,最后一层节点数与page数量相等。每次内存分配需要保证内存的连续性,这样才能简单的操作分配到的内存,因此这里构造了一颗完整的平衡二叉树,所有子节点的管理的内存也属于其父节点。如果我们想获取一个8K的内存,则只需在第11层找一个可用节点...
2019-10-28 21:55:28 479
原创 Netty源码分析-PoolArena
1、PoolChunk:维护一段连续内存,并负责内存块分配与回收,其中比较重要的两个概念:page:可分配的最小内存块单位;chunk:page的集合;2、PoolSubpage:将page分为更小的块进行维护;3、PoolChunkList:维护多个PoolChunk的生命周期。多个PoolChunkList也会形成一个list,方便内存的管理。最终由PoolArena对这一系列类进...
2019-10-28 13:37:41 348
原创 Netty源码分析-PoolChunkList
前面我们介绍了PoolChunk以及针对page的更细粒度的PoolSubpage,其实在chunk的上层还有一个管理类:PoolChunkList,PoolChunkList负责管理多个chunk的生命周期,在此基础上对内存分配进行进一步的优化,那它是如何去做的呢?我们来简单的了解下,先看看它的几个属性: //arena,整个内存池管理的大管家 private final P...
2019-10-27 22:34:11 360
原创 Netty源码分析-内存模型PoolSubpage
PoolSubpage源码分析-这个方法获取一个long表示的64个比特位置是否还有空余空间 private int findNextAvail() { // 没有明确的可用位置时则挨个查找 final long[] bitmap = this.bitmap; final int bitmapLength = this...
2019-10-27 16:38:08 483
原创 Netty使用技巧-使用Openssl加密传输
JDK原生使用数字证书和PKCS#8格式的私钥完成SSL引擎的初始化。#使用JDK的SslEngine引擎初始化SslContentFile certChainFile=new File("/home/certs/nginx.crt");File keyFile=new File("/home/certs/pkcs8_rsa_private_key.pem");SslConte...
2019-10-22 17:39:57 4682 1
原创 Netty源码分析-Unsafe
Unsafe是JAVA提供偏底层的一个工具类,提供堆外内存管理,CAS操作,线程调度等功能。Unsafe这个类不能直接获取,需要用反射获取其对象。 //反射拿到Unsafe对象 private static Unsafe reflectGetUnsafe() { try { Field field = Unsafe.class....
2019-10-16 18:06:26 322
原创 Netty源码分析-PlatformDependent内存管理
PlatformDependent类当中的常量,定义了允许使用的堆外内存最大值,该值可以通过-XX:MaxDirectMemorySize=2G设置。private static final long MAX_DIRECT_MEMORY = maxDirectMemory0();在netty中,如果使用了堆外内存,Netty会进行统计,如果超过最大限制会抛出异常。 ...
2019-10-15 17:41:46 1904
原创 Netty源码分析-NioEventLoop(二)
NioEventLoop源码分析。EventLoop的本质:内部一个线程,一个有序队列存储,线程源源不断的运行队列中的任务。register方法把java-nio的channel注册到selector上面。 //把JAVA底层Channel注册到selector上 public void register(final SelectableChannel ch, f...
2019-10-14 14:45:23 301
原创 Netty源码分析-MultithreadEventExecutorGroup
MultithreadEventExecutorGrouppublic abstract class MultithreadEventExecutorGroup extends AbstractEventExecutorGroup { private final EventExecutor[] children; private final Set<Event...
2019-10-12 16:12:08 944
原创 Netty源码分析-SingleThreadEventExecutor
public abstract class SingleThreadEventExecutor extends AbstractScheduledEventExecutor implements OrderedEventExecutor { static final int DEFAULT_MAX_PENDING_EXECUTOR_TASKS = Math.max(16...
2019-10-12 15:13:51 1933
原创 Netty源码分析-GlobalEventExecutor
GlobalEventExecutor源码分析,GlobalEventExecutor内部只有一个线程执行队列中的任务,如果队列超过1秒没有新的任务,那么线程会结束, 此时如果再有新的任务加入,则会创建新的线程继续执行。package io.netty.util.concurrent;import io.netty.util.internal.logging.InternalLo...
2019-10-11 14:23:30 1319
原创 Netty源码分析-AbstractScheduledEventExecutor
AbstractScheduledEventExecutor源码分析public abstract class AbstractScheduledEventExecutor extends AbstractEventExecutor { //比较器-根据ScheduledFutureTask的到期时间比较大小 //到期时间长的大 private static f...
2019-10-10 15:41:21 521
原创 Netty源码分析-DefaultPriorityQueue
DefaultPriorityQueue保证队列元素的顺序性,在add和poll元素时会移动元素,根据元素大小重新排列数据在元素中的位置,保证元素的顺序性。package io.netty.util.internal;import java.util.AbstractQueue;import java.util.Arrays;import java.util.Comparat...
2019-10-09 17:39:17 621
原创 Netty源码分析-ScheduledFutureTask
ScheduledFutureTask//Netty当中的异步任务,把逻辑封装到此类异步完成后获取结果final class ScheduledFutureTask<V> extends PromiseTask<V> implements ScheduledFuture<V>, PriorityQueueNode { //任务ID 自增,唯一...
2019-10-08 20:48:35 1267
原创 Netty源码分析-InternalThreadLocalMap
InternalThreadLocalMap源码分析package io.netty.util.internal;import io.netty.util.concurrent.FastThreadLocal;import io.netty.util.concurrent.FastThreadLocalThread;import io.netty.util.internal.l...
2019-10-07 15:26:29 929 1
原创 Netty源码分析-FastThreadLocalRunnable
FastThreadLocalRunnable源码分析package io.netty.util.concurrent;import io.netty.util.internal.ObjectUtil;final class FastThreadLocalRunnable implements Runnable { private final Runnable runnab...
2019-10-07 15:06:45 1321
原创 Netty源码分析-FastThreadLocalThread
FastThreadLocalThread源码分析package io.netty.util.concurrent;import io.netty.util.internal.InternalThreadLocalMap;import io.netty.util.internal.UnstableApi;//如果传入Rannable都使用FastThreadLocalRunnab...
2019-10-07 10:50:36 324
原创 Netty源码分析-PromiseTask
PromiseTask源码分析package io.netty.util.concurrent;import java.util.concurrent.Callable;import java.util.concurrent.RunnableFuture;//封装一个任务,该类的成功与失败状态只能由执行结果决定,不能通过外部设置class PromiseTask<V...
2019-10-06 20:56:37 462
原创 Netty源码分析-AbstractExecutorService
Netty源码分析-AbstractExecutorService,这个类是JDK里面并发包内的类,在阅读Netty源码时看到。package java.util.concurrent;import java.util.*;public abstract class AbstractExecutorService implements ExecutorService { ...
2019-10-06 18:47:32 299
原创 Netty源码分析-ChannelFuture的注意事项
在Netty当中所有的IO操作全部是异步的,也就是说调用任何方法都会立即返回,而不能保证所请求的I / O操作在调用结束时已完成,想下面的方法,像对端发送一个消息,方法会立即返回,但是消息是异步发送的,你不知道消息最后的具体发送是成功了还是失败了。ctx.channel().writeAndFlusf();该方法返回一个ChannelFuture实力,通过它设置回调函数来接收操作的执行情...
2019-10-04 12:31:45 634
原创 Netty源码分析-DefaultPromise
Netty-Future基类,所有IO操作都返回该实现或其子类DefaultPromise源码分析://Netty-Future基类,所有IO操作都返回该实现或其子类public class DefaultPromise<V> extends AbstractFuture<V> implements Promise<V> { private...
2019-10-03 22:53:47 907
原创 Netty源码分析-DefaultFutureListeners
Netty对内存使用做了极大的优化,一个存储Listeners的容器都没有直接使用List,而是自定义实现,每次扩容2个,因为Listeners每次使用时并不会设置太多,使用List会浪费一点点内存。package io.netty.util.concurrent;import java.util.EventListener;//Netty所有IO操作都是异步的,通过设置回...
2019-10-03 15:08:34 384
FreeMarker 技术应用在哪些场景
2014-02-07
Spring 与 Cglib代理的诡异问题
2013-10-28
谁能真正整明白java volatile 关键字? 一知半解的莫入!
2013-10-10
JDK动态代理 CGLIB动态代理 AspectJ静态代理的区别是什么?
2013-10-06
log4j如何配置日志,就是想看哪个就看哪个
2013-08-11
Fiddler 如何设置拦截代码发起的HTTP请求
2013-07-01
java中 volatile关键字具体什么作用
2013-05-12
请教 Aspose.Cells for Java 自定义excel模板问题
2013-04-28
java如何获取 request payload 里面的数据
2013-04-13
Jackson 序列化 如何让为NULL的属性不参与序列化
2013-03-29
springmvc @ResponseBody日期格式化
2013-03-16
Json_lib 序列化对象 如果属性为null 不序列化
2013-03-14
Hibernate 查看SQL语句
2013-02-23
ExtJs 实现类似JqGrid的搜索功能,求能人指点
2013-02-18
Jackson Json序列化的问题
2013-01-25
java自动识别图片固定位置的编号
2013-01-09
请问console.log([]==![]);的输出结果,原理是什么?
2013-01-01
ExtJs JsonStore 配置问题
2012-12-07
javaScript 回调函数问题
2012-12-01
为什么往匿名类的方法中传参数必须定义长final的
2012-11-16
JsonObject 解析java对象的问题
2012-11-14
Hibernate4.1.7 配置proxool 问题
2012-11-10
怎么样能让tomcat6 在死掉的时候自动重启
2012-09-28
jquery validate 让普通按钮 代替 submit 来激发表单验证
2012-09-25
mybatis-3.1.1的配置文件下载地址
2012-09-10
关于ibaits返回map缓存问题
2012-09-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人