12 2016 档案

摘要:概念先知 什么是垃圾回收 简单的说垃圾回收就是回收内存中不再使用的对象。 垃圾回收的基本步骤: 查找内存中不再使用的对象 释放这些对象占用的内存 查找内存中不再使用的对象 如何判断哪些对象不再被使用呢?有2个方法: 引用计数法 引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的 阅读全文
posted @ 2016-12-31 10:27 wade&luffy 阅读(827) 评论(1) 推荐(0) 编辑
摘要:Shutdown Hook Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。 JDK提供了Java.Runtime.addShutdownHook(Thread hook 阅读全文
posted @ 2016-12-31 08:55 wade&luffy 阅读(860) 评论(0) 推荐(0) 编辑
摘要:Future用于获取异步操作的结果,而Promise则比较抽象,无法直接猜测出其功能。 Future Future最早来源于JDK的java.util.concurrent.Future,它用于代表异步操作的结果。 可以通过get方法获取操作结果,如果操作尚未完成,则会同步阻塞当前调用的线程;如果不 阅读全文
posted @ 2016-12-28 19:02 wade&luffy 阅读(5804) 评论(0) 推荐(0) 编辑
摘要:Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量、并发性和安全性等架构质量属性。Netty的线程模型被精心地设计,既提升了框架的并发性能,又能在很大程度避免锁,局部实现了无锁化设计。 线程模型 一般首先会想到的是经典的Reactor线程模型,尽管不同的NIO框架对于Re 阅读全文
posted @ 2016-12-27 17:29 wade&luffy 阅读(12631) 评论(1) 推荐(2) 编辑
摘要: 阅读全文
posted @ 2016-12-27 13:07 wade&luffy 阅读(1227) 评论(0) 推荐(0) 编辑
摘要:ChannelHandler功能介绍 ChannelHandler类似于Servlet的Filter过滤器,负责对I/O事件或者I/O操作进行拦截和处理,它可以选择性地拦截和处理自己感兴趣的事件,也可以透传和终止事件的传递。基于ChannelHandler接口,用户可以方便地进行业务逻辑定制,例如打 阅读全文
posted @ 2016-12-26 20:08 wade&luffy 阅读(4743) 评论(0) 推荐(0) 编辑
摘要:Netty的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。Netty的Channel过滤器实现原理与Servlet Filter机制一致,它将Channe 阅读全文
posted @ 2016-12-24 17:13 wade&luffy 阅读(6170) 评论(0) 推荐(0) 编辑
摘要:web系统由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。无论web系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问web系统的整个应用群与访问单个系统一样,登录/注销只要一次就够了。 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览 阅读全文
posted @ 2016-12-21 20:40 wade&luffy 阅读(545) 评论(0) 推荐(0) 编辑
摘要:谈谈互联网后端基础设施 http://www.rowkey.me/blog/2016/08/27/server-basic-tech-stack/ 为什么使用消息队列 解耦:一个事务,只关心核心的流程,需要依赖其他系统但不那么重要的事情,有通知即可,无须等待结果。 异步:指的是两个系统的状态保持一致 阅读全文
posted @ 2016-12-21 20:11 wade&luffy 阅读(905) 评论(0) 推荐(0) 编辑
摘要:Unsafe接口实际上是Channel接口的辅助接口,它不应该被用户代码直接调用。实际的I/O读写操作都是由Unsafe接口负责完成的。 Unsafe继承关系类图 AbstractUnsafe源码分析 1.register方法 register方法主要用于将当前Unsafe对应的Channel注册到 阅读全文
posted @ 2016-12-20 18:48 wade&luffy 阅读(806) 评论(0) 推荐(0) 编辑
摘要:提起Channel,JDK的NIO类库的重要组成部分,就是提供了java.nio.SocketChannel和java.nio.ServerSocketChannel,用于非阻塞的I/O操作。 类似于NIO的Channel,Netty提供了自己的Channel和其子类实现,用于异步I/O操作和其他相 阅读全文
posted @ 2016-12-20 18:22 wade&luffy 阅读(1179) 评论(0) 推荐(0) 编辑
摘要:MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key 阅读全文
posted @ 2016-12-20 10:44 wade&luffy 阅读(362) 评论(0) 推荐(0) 编辑
摘要:当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer。 实际上,7种基础类型(Boolean除外)都有自己的缓冲区实现,对于NIO编程而言,我们主要使用的是ByteBuffer。从功能角度而言,ByteBuffer完全可以满足NIO编 阅读全文
posted @ 2016-12-19 14:05 wade&luffy 阅读(9972) 评论(1) 推荐(0) 编辑
摘要:通信协议从广义上区分,可以分为公有协议和私有协议。由于私有协议的灵活性,它往往会在某个公司或者组织内部使用,按需定制,也因为如此,升级起来会非常方便,灵活性好。绝大多数的私有协议传输层都基于TCP/IP,所以利用Netty的NIO TCP协议栈可以非常方便地进行私有协议的定制和开发。 私有协议介绍 阅读全文
posted @ 2016-12-16 12:31 wade&luffy 阅读(7842) 评论(0) 推荐(0) 编辑
摘要:文件(File)是最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件、声音文件等数据文件。在实际使用时,文件都包含一个特定的格式,这个格式需要程序员根据需求进行设计。读取已有的文件时也需要熟悉对应的文件格式,才能把数据从文件中正确地读取出来。 在NIO类库提供之前,Java所有的文 阅读全文
posted @ 2016-12-15 15:54 wade&luffy 阅读(974) 评论(0) 推荐(0) 编辑
摘要:UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UDP协议直接利用IP协议进行UDP数据报的传输,UDP提供的是面向无连接的、不可靠的数据报投递服务。当使用UDP协议传 阅读全文
posted @ 2016-12-14 20:26 wade&luffy 阅读(2710) 评论(0) 推荐(0) 编辑
摘要:一直以来,网络在很大程度上都是围绕着HTTP的请求/响应模式而构建的。客户端加载一个网页,然后直到用户点击下一页之前,什么都不会发生。在2005年左右,Ajax开始让网络变得更加动态了。但所有的HTTP通信仍然是由客户端控制的,这就需要用户进行互动或定期轮询,以便从服务器加载新数据。 长期以来存在着 阅读全文
posted @ 2016-12-14 16:34 wade&luffy 阅读(4949) 评论(0) 推荐(0) 编辑
摘要:Netty HTTP+XML协议栈开发 由于HTTP协议的通用性,很多异构系统间的通信交互采用HTTP协议,通过HTTP协议承载业务数据进行消息交互,例如非常流行的HTTP+XML或者RESTful+JSON。 场景设计 模拟一个简单的用户订购系统。客户端填写订单,通过HTTP客户端向服务端发送订购 阅读全文
posted @ 2016-12-14 12:12 wade&luffy 阅读(5325) 评论(0) 推荐(0) 编辑
摘要:HTTP(超文本传输协议)协议是建立在TCP传输协议之上的应用层协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 本文将重点介绍如何基于Netty的HTTP协议栈进行HTTP服务端和客户端开发。由于Netty的HTTP协议栈是基于Netty的NIO 阅读全文
posted @ 2016-12-14 11:22 wade&luffy 阅读(2800) 评论(0) 推荐(0) 编辑
摘要:JBoss的Marshalling序列化框架,它是JBoss内部使用的序列化框架,Netty提供了Marshalling编码和解码器,方便用户在Netty中使用Marshalling。 JBoss Marshalling是一个Java对象序列化包,对JDK默认的序列化框架进行了优化,但又保持跟jav 阅读全文
posted @ 2016-12-13 14:53 wade&luffy 阅读(3275) 评论(0) 推荐(0) 编辑
摘要:Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点。 (1)在谷歌内部长期使用,产品成熟度高; (2)跨语言,支持多种语言,包括C++、Java和Python; (3)编码后的消息更小,更加有利于存储和传输; (4)编解码的性能非常高 阅读全文
posted @ 2016-12-13 13:54 wade&luffy 阅读(2709) 评论(0) 推荐(0) 编辑
摘要:大多数Java程序员接触到的第一种序列化或者编解码技术就是Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够通过java.io.ObjectInput和java.io.ObjectOutput序列化和反序列化。 不 阅读全文
posted @ 2016-12-13 11:06 wade&luffy 阅读(2044) 评论(0) 推荐(0) 编辑
摘要:TCP以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下4种方式。 (1)消息长度固定,累计读取到长度总和为定长LEN的报文后,就认为读取到了一个完整的消息;将计数器置位,重新开始读取下一个数据报; (2)将回车换行符作为消息结束符,例如FTP协议,这种方式在文本协议中应用比较广 阅读全文
posted @ 2016-12-13 10:13 wade&luffy 阅读(3126) 评论(0) 推荐(0) 编辑
摘要:无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制。 TCP粘包/拆包 TCP是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包 阅读全文
posted @ 2016-12-12 22:02 wade&luffy 阅读(21574) 评论(5) 推荐(7) 编辑
摘要:服务端代码示例 客户端代码示例: pom.xml 阅读全文
posted @ 2016-12-12 19:04 wade&luffy 阅读(4146) 评论(0) 推荐(1) 编辑
摘要:NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供两种方式获取获取操作结果。 CompletionHandler接口的实现类作为操作完成的回调。 NIO2.0的异步套接字通道是真正的异步非阻塞I/O,它对应UNIX网络编程中的事件驱动I/O(AIO),它不 阅读全文
posted @ 2016-12-12 17:13 wade&luffy 阅读(1988) 评论(1) 推荐(2) 编辑
摘要:我们首先需要澄清一个概念:NIO到底是什么的简称?有人称之为New I/O,因为它相对于之前的I/O类库是新增的,所以被称为New I/O,这是它的官方叫法。但是,由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O,所以,更多的人喜欢称之为非阻塞I/O(No 阅读全文
posted @ 2016-12-12 15:21 wade&luffy 阅读(3326) 评论(0) 推荐(1) 编辑
摘要:伪异步IO编程 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接。在高性能服务器应用领域,往往需要面向成千上万个客户端的并发连接,这种模型显然无法满足高性能、高并发接入的场景。为了改进一线程一连接模型,后来又演进出了 阅读全文
posted @ 2016-12-12 13:56 wade&luffy 阅读(782) 评论(0) 推荐(0) 编辑
摘要:网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。 在基于传统同步阻塞模型 阅读全文
posted @ 2016-12-12 13:42 wade&luffy 阅读(328) 评论(0) 推荐(0) 编辑
摘要:对于调优这个事情来说,一般就是三个过程: 调优准备 调优是需要做好准备工作的,毕竟每一个应用的业务目标都不尽相同,性能瓶颈也不会总在同一个点上。在业务应用层面,我们需要: 此外,我们还需要了解Java相关的一些知识:对Java代码进行基准性能测试:可以使用JMH来进行。HotSpot VM相关知识: 阅读全文
posted @ 2016-12-07 17:23 wade&luffy 阅读(414) 评论(0) 推荐(0) 编辑
摘要:Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作: 1.Resource访问文件资源: 具体有: 2.文件操作 FileCopyUtils 具体有: 3.属性文件操作 PropertiesLoaderUtils 具体有: 4.EncodedResource(Resource对象,” 阅读全文
posted @ 2016-12-02 12:44 wade&luffy 阅读(1076) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示