Java字节码入门

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

mysql索引条件下推原理

mysql5.6增加了一个针对索引性能的优化方案,可以利用索引把本来由服务层做的过滤操作下推到引擎层完成,较少了数据的传输,提升索引效率。今天讨论一下这个优化方案——索引条件下推(Index Condition Pushdown, ICP) 假设存在一张表结构如下: 以下面这条SQL为例,当没有索引条件下推优化的时候,由于联合索引只能命中zipcode(最左原则+模糊匹配字符串不支持索引过滤),导 …

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相关方法开始的,优雅关闭的方法为: 之所以称之为优雅,是此方要求关闭前必须满足在静默时间 …