自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

公众号:不止于Java github:https://github.com/cyxpdc?tab=repositories 邮箱:1142439493@qq.com

  • 博客(29)
  • 收藏
  • 关注

原创 《深入拆解Tomcat&Jetty》总结八:通用模块

13 Logger组件:日志框架及实战默认情况下,Tomcat 使用自身的JULI 作为 Tomcat 内部的日志处理系统。JULI 的日志门面采用了 JCL;而 JULI 的具体实现是构建在 Java 原生的日志系统java.util.logging之上的13.1 Java原生日志java.util.logging组件:Logger:用来记录日志的类。Handler:规定了日志的...

2019-09-23 16:44:19 648

原创 《深入拆解Tomcat&Jetty》总结七:容器

11 Host容器::如何实现热部署和热加载要在运行的过程中升级Web应用,如果不想重启系统,实现的方式有两种:热加载和热部署。具体实现跟类加载机制有关:热加载的实现方式是Web容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类,在这个过程中不会清空Session ,一般用在开发环境。热部署原理类似,也是由后台线程定时检测Web应用的变化,但它会重新加载整个Web应用。...

2019-09-22 17:26:55 556

原创 《深入拆解Tomcat&Jetty》总结六:关于性能的设计

8 Jetty的线程策略EatWhatYouKillJetty总体架构设计:Connector:ManagedSelector在线程策略方面的做法:将I/O事件的侦测和处理放到同一个线程来处理,充分利用了CPU缓存并减少了线程上下文切换的开销。这种名为“EatWhatYouKill”的线程策略将吞吐量提高了8倍8.1 Selector常规思路常规的NIO编程思路是,将I/O事件的侦...

2019-09-21 22:40:49 617

原创 《深入拆解Tomcat&Jetty》总结五:EndPoint+Processor+Executor

补充:https://jiges.github.io/2018/02/07/%E4%BA%94%E5%A4%A7IO%E6%A8%A1%E5%9E%8B7 EndPoint组件+Processor+ExecutorI/O就是计算机内存与外部设备之间拷贝数据的过程。CPU访问内存的速度远远高于外部设备,因此CPU是先把外部设备的数据读到内存里,然后再进行处理。当程序通过CPU向外部设备发出...

2019-09-21 20:31:53 503

原创 《深入拆解Tomcat&Jetty》总结四:Jetty架构解析

6 Jetty架构Jetty更加小巧,更易于定制化6.1 整体架构简单来说,Jetty Server由多个Connector(连接器)、多个Handler(处理器),以及一个线程池组成。Connector组件和Handler组件分别来实现HTTP服务器和Servlet容器的功能;这两个组件工作时所需要的线程资源都直接从一个全局线程池ThreadPool中获取。Jetty Server...

2019-09-20 17:19:15 402

原创 《深入拆解Tomcat&Jetty》总结三:Tomcat的启停

4 Tomcat实现一键式启停回顾一下总体架构和一个请求的流转过程:想让一个系统能够对外提供服务,需要创建、组装并启动这些组件;在服务停止的时候,还需要释放资源,销毁这些组件,因此这是一个动态的过程。也就是说,Tomcat需要动态地管理这些组件的生命周期。4.1 一键式启停:LifeCycle接口最直观的做法就是将图上所有的组件按照先小后大、先内后外的顺序创建出来,然后组装在一起。...

2019-09-20 11:27:44 294

原创 《深入拆解Tomcat&Jetty》总结二:Tomcat系统架构

3 Tomcat系统架构两个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化。加载和管理Servlet,以及具体处理Request请求、回送Response响应。对应的总体架构:Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。Tomcat支...

2019-09-19 23:04:07 406

原创 《深入拆解Tomcat&Jetty》总结一:Web服务器的前导知识之HTTP和Servlet规范

1 HTTP和Tomca/Jetty的关系Tomcat/Jetty本质:HTTP服务器 + Servlet容器HTTP请求过程:补充:Tomcat的Session管理器提供了多种持久化方案来存储Session,通常会采用高性能的存储方式,比如Redis,并且通过集群部署的方式,防止单点故障,从而提升高可用。同时,Session有过期时间,因此Tomcat会开启后台线程定期的轮询,如果Se...

2019-09-19 22:57:15 411

原创 《从Docker到Kubernetes》总结二:Docker相关知识简述

https://www.bilibili.com/video/av56101144Docker配置文件、日志Docker配置文件(Cent OS 7):/usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/docker daemon -H fd:// -H=unix:///var/run/docker.sock -H=tcp://0...

2019-09-18 20:14:42 712

原创 《Effective Java Third》第十二章总结:序列化

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual第十二章 序列化85.Java 序列化的替代方案Java序列化并不安全,而且耗时没有理由在任何新系统中使用 Java 序列化。如果不能完全避免 Java 序列化,可能是因为需要在遗留系统环境中工作,那么下一个最佳选择是 永远不要反...

2019-09-15 16:58:19 182

原创 《Effective Java Third》第十一章总结:并发

https://blog.csdn.net/u010321349/article/details/83927012https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual第十一章 并发78.同步对共享可变数据的访问一个线程可以暂时修改一个数据对象,然后与其他线程共享,并且只同步共享对象引...

2019-09-15 11:06:17 286

原创 《Effective Java Third》第十章总结:异常

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual第十章 异常69.仅在确有异常条件下使用异常利用错误判断机制来提高性能是错误的,将代码放在 try-catch 块中会抑制 JVM 可能执行的某些优化。事实上,基于异常的用法比标准用法慢得多。异常只适用于确有异常的情况;它们不应该...

2019-09-15 08:57:51 274

原创 《Effective Java Third》第九章总结:通用程序设计

第九章 通用程序设计57.将局部变量的作用域最小化本item类似(15)- 最小化类和成员的可访问性;通过最小化局部变量的范围,可以提高代码的可读性和可维护性,并降低出错的可能性。将局部变量的作用域最小化,最具说服力的方式就是在第一次使用它的地方声明每个局部变量声明都应该包含一个初始化表达式。 如果你还没有足够的信息来合理地初始化一个变量,你应该推迟声明,直到条件满足;这个规则的一个例...

2019-09-14 22:14:30 191

原创 《从Docker到Kubernetes》总结一:Docker综述

http://ju.outofmemory.cn/entry/111456https://www.bilibili.com/video/av56101144Docker被称为第三代Paas平台1 Docker技术原理Docker是基于Linux的、虚拟化的一种轻量级替代技术。Docker的容器技术不依赖任何语言、框架或系统,可以将App变成一种标准化的、可移植的、自管理的组件,并脱离服务...

2019-09-14 20:50:32 406

原创 《Effective Java Third》第八章总结:方法

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/master/Chapter-9/Chapter-9-Introduction.md第八章 方法49.检查参数的有效性Objects.requireNonNull、assert、都是很好的方式每次编写方法或构造函数时,都...

2019-09-14 10:15:13 156

原创 《Effective Java Third》第七章总结:Lambdas表达式和流(待补充)

https://blog.csdn.net/qq_20009015/article/details/90748293https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingualhttps://sjsdfg.github.io/effective-java-3rd-chinesehttps://...

2019-09-13 20:13:54 133

原创 《Effective Java Third》第六章总结:枚举和注解

第六章 枚举和注解34.用枚举类型代替 int 常量在枚举类型被添加到 JAVA 之前,表示枚举类型的一种常见模式是声明一组 int 的常量,使用public static final修饰缺点:没有提供任何类型安全性,也没有提供多少表达能力;没有一种简单的方法可以将 int 枚举常量转换为可打印的字符串;如果与 int 枚举关联的值发生了更改,则必须重新编译客户端。如果不重新编译,客户...

2019-09-13 09:26:12 218

原创 《Effective Java Third》第五章总结:泛型

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingualhttps://sjsdfg.github.io/effective-java-3rd-chinese第五章 泛型术语中文含义举例所在条目Parameterized type参数化类型List<Str...

2019-09-11 21:29:01 300

原创 《Effective Java Third》第四章总结:类和接口

https://blog.csdn.net/liyagangcsdn/article/details/68946795https://www.cnblogs.com/bushi/articles/6525044.htmlhttps://blog.csdn.net/weixin_34236869/article/details/85811863https://blog.csdn.net/zjq...

2019-09-10 09:02:04 293

原创 Object的clone()为什么使用protected修饰?

使用protected修饰clone方法是为了安全考虑。因为Object类中的clone方法是浅拷贝,如果是对象,它拷贝的只是这个对象的一个引用,而这个引用仍然指向那个对象,当我们改变这个引用的属性时,原来的对象也会跟着改变,这样其他引用也会跟着改变;这不是我们希望看到的,但是Object类肯定做不到深拷贝,因为它不知道自定义的类里有哪些引用类型;所以把修饰符定义为protected,这样想...

2019-09-08 23:57:57 796

原创 《Effective Java Third》第三章总结:对于所有对象都通用的方法

https://sjsdfg.github.io/effective-java-3rd-chinesehttps://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/第三章 对于所有对象都通用的方法10 重写equals方法时遵守通用约定因为没有哪个类是孤立存在的。一个类的实例常常被传递给另一...

2019-09-08 16:52:06 252

原创 《Effective Java Third》第二章总结:创建和销毁对象

第二章 创建和销毁对象1 考虑使用静态工厂方法替代构造方法一个类可以提供一个返回类实例的公共的静态工厂方法来替代构造方法,如Boolean#valueOf:public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}1.1 与构造方法相比的优点1.静态工厂方法是有名字的...

2019-09-07 23:46:55 258

原创 《Netty深入剖析》之十一(终):Netty高并发性能调优

11 高并发性能调优11.1 单机百万连接调优11.1.1 如何模拟百万连接使用两台虚拟机,一台服务端一台客户端如何模拟呢?情况1:一台Client一台Server,只能有6w连接,因为Client只剩下大概6w个端口可以去连接服务端优化1:可以使用多个Client去连接服务端,要开启十几台虚拟机,麻烦优化2:服务端启动8000~8100端口,且因为TCP是一个四元组概念:源ip、...

2019-09-06 20:28:12 2023

原创 《Netty深入剖析》之十:Netty设计模式的应用

10 设计模式10.1 单例模式三个原则:全局只有一个实例(private 构造方法)、延迟加载(static)、避免多线程同步创建(static、synchronized)例子:ReadTimeoutException、MqttEncoderReadTimeoutException:public final class ReadTimeoutException extends Time...

2019-09-06 20:26:35 410

原创 《Netty深入剖析》之九:Netty性能优化工具类解析

9 Netty性能优化工具类解析两大性能优化工具类:FastThreadLocal、Recycler(实现了轻量级对象池机制,主要用于ByteBuf)9.1 FastThreadLocal的实现机制https://www.jianshu.com/p/14f461568008:核心图对于jdk的ThreadLocal来讲,其底层数据结构就是一个Entry[]数组,key为ThreadLoc...

2019-09-05 22:32:48 314

原创 《深入剖析Netty》之八:Netty编码

8 Netty编码和writeAndFlush()如果调用writeAndFlush(),且有对应的编码器,那么Netty就能将对象变成字节流,最终写到socket底层总过程图:涉及两个重要的自定义handler:Encoder、BizHandler;最后传到head,通过底层unsafe写到socketBizHandler:public class BizHandler extends...

2019-09-04 13:24:49 205

原创 《Netty深入剖析》之七:Netty解码

7 Netty解码将二进制数据流解析成自定义协议数据包ByteBuf两个部分:1.解码器基类2.常见的解码器分析7.1 解码器基类ByteToMessageDecoder解码步骤流程1.使用一个累加器cumulation(类型为ByteBuf)来累加字节流2.调用子类的decode方法进行解析(callDecode(),去累加器读取数据)3.如果解析到了ByteBuf,则将解...

2019-09-03 22:30:59 411

原创 《Netty深入剖析》之六:ByteBuf及内存管理

6 内存分配:ByteBuf最底层作用将数据从底层IO里面读到ByteBuf,传递给应用程序,应用程序处理完之后,再把数据封装成ByteBuf传回给IO主要内容:内存与内存管理器的抽象不同规格大小和不同类别的内存的分配策略内存的回收过程6.1 ByteBuf结构及重要API结构:三个指针:readerIndex、writerIndex、capacity写数...

2019-09-03 09:12:52 852

原创 《Netty深入剖析》之五:大动脉Pipeline

5 pipeline5.1 pipeline的初始化5.1.1 pipeline在创建Channel的时候被创建AbstractChannel的构造方法中会进行创建DefaultChannelPipeline即服务端和客户端channel被创建的时候创建5.1.2 pipeline节点数据结构:ChannelHandlerContext接口扩展自AttributeMap, Channe...

2019-09-02 08:44:18 304

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除