谈谈Netty的线程模型

一、前言

Netty是一个异步、基于事件驱动的网络应用程序框架,其对 Java NIO进行了封装,大大简化了 TCP 或者 UDP 服务器的网络编程。Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性能问题,它的设计参考了许多协议的实现,比如 FTP,SMTP,HTTP 和各种二进制和基于文本的传统协议,因此 Netty 成功的实现了兼顾快速开发,性能,稳定性,灵活性为一体,不需要为了考虑一方面原因而妥协其他方面。Netty 的应用还是比较广泛的,比如Apache Dubbo 、Apache RocketMq、Zuul 2.0服务网关、Spring WebFlux、Sofa-Bolt 底层网络通讯都是基于 Netty 来实现的,本文探讨Netty4。

阅读全文

JVM之动态方法调用:invokedynamic

在本文的前面的姊妹篇中,介绍了Java方法调用的5种操作码中的4种。它们是Java 8和Java 9中方法调用的标准字节码形式。

于是第五个操作码invokedynamic便进入了我们的视线。简单来说,Java 7中在语言层面上对invokedynamic是没有直接支持的。事实上,当Java 7的运行时首次引入invokedynamic指令时,javac编译器是不会生成这个字节码的。

阅读全文

Java 异步编程导论

异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且等工作单元运行结束后通知主应用程序线程它的运行结果或者失败原因。使用它有许多好处,例如改进的应用程序性能和减少用户等待时间等。

阅读全文

JVM优化之循环展开

在JVM内部实现系列的前几篇文章中,我们已经看到了Java的HotSpot虚拟机的just-in-time (JIT)编译技术,包括逃逸分析和锁消除。本文我们将要讨论另一种自动优化,叫作循环展开。JIT编译器使用这项技术来让循环(比如Java的for或者while循环)执行得更加高效。

阅读全文

看完这篇还不清楚Netty的内存管理,那我就哭了!

摘要: 原创出处 http://www.jiangxinlingdu.com/ 「公众号:匠心零度 」欢迎关注和转载,保留摘要,谢谢!

说明

在学习Netty的时候,ByteBuf随处可见,但是如何高效分配ByteBuf还是很复杂的,Netty的池化内存分配这块还是比较难的,很多人学习过,看过但是还是云里雾里的,本篇文章就是主要来讲解:Netty分配池化的堆外内存的细节,期待可以让你明白!!!

由于为了更好的表达,文章中的图我最少画了6小时,画的不熟悉,并且也强调一些细节上。

由于该源码中涉及到大量的二进制操作,建议看看我之前写的2篇二进制文章:java二进制相关基础二进制实战技巧

阅读全文

JVM优化之逃逸分析及锁消除

逃逸分析——我们在上一篇文章中所介绍的由编译器完成的一项的分析技术——使得删除锁的优化成为了可能。如果它能确认某个加锁的对象不会逃逸出局部作用域,就可以进行锁删除。这意味着这个对象同时只可能被一个线程访问,因此也就没有必要防止其它线程对它进行访问了。这样的话这个锁就是可以删除的。这个便叫做锁消除,本文是JVM实现机制的系列文章,这也正是今天要讲的主题。

阅读全文

(译文)InnoDB中的AUTO_INCREMENT处理

(译者注)网站和app并发性能取决于访问链路的每个环节,包括前端、流量路由、后台业务逻辑代码、中间件和数据库等。大部分环节都可以通过横向扩展来提高并发性能,数据库作为链路的末端要保持数据一致性等特点不像其他环节容易横向扩展,所以数据库性能尤为重要,特别是插入性能。
数据库设计通常会用一列与业务无关的自增长id作为主键(互联网业务数据库设计一般不会完全遵循数据库范式,如果有其他列值是随时间递增,也可以用该列做主键),提高写入效率和方便数据复制。而自增长id生成模式影响着数据插入性能。

阅读全文

JVM优化之逃逸分析与分配消除

在Java Magazine的前几期文章中,我们介绍了just-in- time (JIT) 编译技术的一些理论基础,以及如何使用Java Microbenching Harness(JMH)和开源工具JITWatch来进行可视化分析,以便搞清楚HotSpot VM的内部机制。在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技术,它可以用来实现某些特殊的优化,后续我们也会分析下这些优化。在开始之前,你只需要掌握一些HotSpot JVM的基本工作原理就可以了。

阅读全文

Reactive(响应式)编程-Reactor

Reactor 是Reactive Programming规范的一个具体实现(rxjava也是规范的一个实现),

阅读全文

(译文)Java中使用var声明局部变量指南

原文链接:Style Guidelines for Local Variable Type Inference in Java
Stuart W.Marks
2018-03-22

简介

Java SE 10引入了局部变量的类型推断。早先,所有的局部变量声明都要在左侧声明明确类型。 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的var类型,是从初始化值的类型中推断出来的。

阅读全文

我们为什么要用Redis

最近阅读了《 Redis 开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾 Redis 的整个体系,来对相关知识点查漏补缺。

阅读全文

领域驱动设计-什么是领域驱动设计和怎么使用它

原文链接

进一步扩展前面我们讨论的面向对象分析和设计(OOAD),这篇文章讨论领域驱动设计(DDD),DDD是建立在面向对象分析设计上开发软件的一种方法。 通过这篇文章我们解释什么是领域驱动设计,在现代开发周期中如何实现,使用DDD的优点和缺点。

阅读全文

Java并发-不懂原理多吃亏

一、前言

并发编程相比 Java 中其他知识点学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/高流量的系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。

阅读全文

记一次时隔两年后的JavaWeb项目重构总结


两年前的2016年,我还没有大学毕业,也才大三下学期,也还有自己的team,一起学习,一起成长,一起技术研究与试炼。不缅怀……当时和自己的team一起开发了“科技计划项目电子辅助验收及评估平台”,然而因为team刚成立几个月,其次,项目也比较赶,在时间紧迫的情况下,只能个人保证自己模块不出问题,然后最后再由作为项目负责人的我来审核并集体进行测试。

那么究竟里面的设计有多烂呢?答案就是,有好有坏。在此就不太过多讨论这些了,有兴趣你可以直接去我的码云Git看一下这个项目的当时的版本。

阅读全文

警报:线上事故之CountDownLatch的威力

2019.2.22号凌晨3点半,是一个让人难以忘怀的、和瑞哥最后一次一起奋战的夜晚。

背景

我们有这样一个业务场景:用户提供各种数据源配置信息,然后基于数据源配置的模板,再者在模板基础上构建报表,而大数据计算平台则会根据这些信息生成数据计算任务,以实时、离线、混合的方式跑数,并将计算结果落到存储设备中。

阅读全文

return top