Java字节码入门

字节码是Java程序员走向进阶的必经之路。如果说一切业务问题在源码面前没有秘密,那么字节码就是带你走到秘密的背后,一窥Java底层的奥义。 如何获取字节码? JVM装载类的方式有很多,最常见的做法就是利用.class文件,这是根据.java文件编译得到的。由于编译过程的存在,所以.java文件所表示的内容在.class可能发生变化。你可以通过javap -v xxx.class命令来获取指定.cl …

DirectByteBuffer简介

堆外内存是不受GC控制的内存空间,相对来说灵活度更高。大部分Java开发不会直接用到堆外内存,但对一些框架应用(如Kafka, Netty)堆外内存是必须牢牢掌控的一份宝藏,因为它最起码具有以下这些好处: 空间不受堆大小限制(但可通过-XX:MaxDirectMemorySize参数控制) 可以自定义内存分配和回收策略,不受JVM gc约束 可以使用零拷贝等高级特性,这在网络IO是极大的优势 构造 …

[译]Java垃圾回收器及对象引用

原文地址:https://dzone.com/articles/java-garbage-collector-and-reference-objects 我们即将讨论Java中的垃圾回收概念 和 回收中会用到到几种对象引用类型。 在本文中,我们将讨论Java中的一些内存管理概念,重点是垃圾收集器与不同对象引用类型之间的交互。 这不是简单的入门文章,你应该预先了解Java Heap和GC的基础知识。 …

Netty源码解读(9)-粘包/拆包问题

This entry is part 9 of 9 in the series Netty源码解读

对象修饰 MessageToMessageEncoder/MessageToMessageDecoder ByteBuf粘包发送 LengthFieldPrepender见Netty源码解读(6)-数据发送 ByteBuf拆包 LengthFieldBasedFrameDecoder ByteBuf解析对象 ByteBuf#readInt(int)ByteBuf#readLong(long)Byt …

Netty源码解读(8)-关闭服务

This entry is part 8 of 9 in the series Netty源码解读

Netty服务的关闭涉及以下几种资源: 线程 EventLoopGroup线程池 EventLoop线程 连接 EventLoop管理下的所有Channel Selector 内存 Channel下的各种缓存资源 线程的关闭 EventLoopGroup 关闭是从EventLoopGroup调用shutdown相关方法开始的,优雅关闭的方法为: 之所以称之为优雅,是此方要求关闭前必须满足在静默时间 …

Netty源码解读(7)-断开连接

This entry is part 7 of 9 in the series Netty源码解读

Netty连接的断开本质上是channel的断开,更具体的(nio)ServerSocketChannel和(nio)SocketChannel的断开,这在jdk的api中定义了方法AbstractInterruptibleChannel#close()。这是netty对一个连接的处理的结束。在执行关闭之前,还需要保证对资源的有序释放,这些资源包括: 主动断开 主动的断开连接是一个出站事件,clo …