随笔分类 - JAVA
摘要:一、Netty和网络通信 (一)Netty框架简介 1、BIO 存在性能问题、可靠性问题、可维护性问题 BIO的核心问题是同步阻塞 public void service() throws IOException { ServerSocket serverSocket = new S
阅读全文
摘要:一、对象创建流程与内存分配 1、创建对象 2、堆的内存分配方式 堆的内存分配方式有指针碰撞和空闲列表两种方式: 指针碰撞:内存是连续的,年轻代使用,使用该种分配方式的垃圾回收器:Serial和ParNew收集器 空闲列表:内存地址不连续,老年代使用,使用该种分配方式的垃圾回收器:CMS和Mark-S
阅读全文
摘要:之前写过一些多线程或者JUC的文章,最近再看并发相关的内容,又有了一些新的理解,做一个补充。 一、Thread 1、Thread和Runable 验证守护线程:如果主线程不休眠,则不会等task中的内容输出,直接停止主线程 public class DaemonThread { public sta
阅读全文
摘要:一、再谈谈什么是高性能 (一)性能指标与演示 首先明确一下,高性能涵盖:高并发用户、高吞吐量、低延迟、容量四个方面,高并发用户是指可以承载海量的并发用户,例如十万个、百万个用户同时连接和并发访问,不会造成系统崩溃;吞吐量就是我们常说的TPS、QPS,即每秒的查询数和事务数;低延时指的是请求的响应速度
阅读全文
摘要:一、基础代码 首先使用BIO单线程、BIO多线程、BIO线程池的方式启动端口为8080、8081、8082三个服务,为后续做准备,同时编写客户端调用,使用HttpClient和OkHttpClient来分别调用。 1、BIO模式单线程模式 public class HttpServer01 { pu
阅读全文
摘要:一、线上问题分类及排查手段 如果发现线上服务变慢等情况,应该如何排查? 1、查询业务日志: 可以发现这类问题:请求压力大,波峰,遭遇降级,熔断等等, 基础服务、外部 API 依赖出现故障。 2、查看系统资源和监控信息: 硬件信息、操作系统平台、系统架构; 排查 CPU 负载、内存不足,磁盘使用量、硬
阅读全文
摘要:一、JVM线程堆栈数据分析 JVM 内部线程主要分为以下几种: VM 线程:单例的 VMThread 对象,负责执行 VM 操作; 定时任务线程:单例的 WatcherThread 对象, 模拟在 VM 中执行定时操作的计时器中断; GC 线程:垃圾收集器中,用于支持并行和并发垃圾回收的线程; 编译
阅读全文
摘要:一、验证GC代码 程序并不复杂,我们指定一个运行时间作为退出条件,时间一到自动退出循环。在 generateGarbage 方法中,我们用了随机数来生成各种类型的数组对象并返回。 在 main 方法中,我们用一个数组来随机存放一部分生成的对象,这样可以模拟让部分对象晋升到老年代。具体的持续运行时间和
阅读全文
摘要:一、按照规范范围区分 根据规范范围区分(也就是规范的是所有虚拟机、还是指定一款虚拟机、还是指定一款虚拟机的指定版本),JVM的参数主要分为三类:标准参数、-X非标准参数、-XX参数。 以 - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,例如下面示例的-server。 -D 设置系
阅读全文
摘要:一、简单字节码分析 JavaByte由单个字节(byte)的指令组成,理论上最多支持256个操作码,实际上Java只使用了200左右的操作码,还有一些操作码留给调试操作。 根据指令的性质,主要分为四大类: 1、栈操作指令,包括与局部变量交互的指令;JVM就类似一个计算机,计算机的运行有基于栈的、有基
阅读全文
摘要:一、安装Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 下载后直接进入bin目录,直接运行jmeter即可,我这里用得是mac,直接sh jmeter 1、调整语言 Options--Choose Languages--Chinese
阅读全文
摘要:一、Netty实现Dubbo RPC (一)RPC 基本介绍 RPC(Remote Procedure Call)—远程过程调⽤,是⼀个计算机通信协议。该协议允许运⾏于⼀台计算机的程序调⽤另⼀台计算机的⼦程序,⽽程序员⽆需额外地为这个交互作⽤编程两个或多个应⽤程序都分布在不同的服务器上,它们之间的调
阅读全文
摘要:一、异步任务调度 (一)为什么要使用异步任务调度 先写一个简单的Netty程序: 1、NettyServer public class NettyServer { public static void main(String[] args) { //1. 创建两个线程组 bossGroup 和 wo
阅读全文
摘要:一、Netty编解码器 (一)Netty编解码器概述 1、Java的编解码 在Java中编码(Encode)称为序列化, 它将对象序列化为字节数组,⽤于⽹络传输、数据持久化或者其它⽤途。解码(Decode)称为反序列化,它把从⽹络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷⻉),以⽅便后
阅读全文
摘要:一、代码示例 下面是简单的Netty代码示例代码示例,核心模块在其中均有体现,后续的模块组件都以该代码作为示例。 1、Server public class NettyServer { public static void main(String[] args) { //创建BossGroup 和
阅读全文
摘要:一、群聊系统 实例要求: 1、编写⼀个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(⾮阻塞) 2、实现多⼈群聊 3、服务器端:可以监测⽤户上线,离线,并实现消息转发功能 4、客户端:通过 channel 可以⽆阻塞发送消息给其它所有⽤户,同时可以接受其它⽤户发送的消息(有服务器转发
阅读全文
摘要:一、Netty概述 (一)Netty是什么 Netty 是由 JBOSS 提供的⼀个 Java 开源框架,现为 Github 上的独⽴项⽬。 Netty 是⼀个异步的、基于事件驱动的⽹络应⽤框架,⽤以快速开发⾼性能、⾼可靠性的⽹络 IO程序。 Netty 主要针对在 TCP 协议下,⾯向 Clien
阅读全文
摘要:一、IO模型 IO在计算机中指Input/Output,也就是输⼊和输出。 (一)内核空间与用户空间 在计算机中,将空间分为内核空间(Kernel-space)和⽤户空间(User-space)。 在 Linux 系统中,内核模块运⾏在内核空间,对应的进程处于内核态;⽽⽤户程序运⾏在⽤户空间,对应的
阅读全文
摘要:一、零拷贝和NIO (一)零拷贝综述 零拷⻉是⽹络编程的关键,很多性能优化都离不开。 零拷⻉(Zero-copy)技术指在计算机执⾏操作时,CPU 不需要先将数据从⼀个内存区域复制到另⼀个内存区域,从⽽可以减少上下⽂切换以及 CPU 的拷⻉时间。它的作⽤是在数据从⽹络设备到⽤户程序空间传递的过程中,
阅读全文
摘要:一、内置命令行工具 JDK内置的命令行工具默认在JDK的安装目录下的bin目录或者在jre所在目录的bin目录下,内置的命令行工具也可以再细分为开发、编译、分发、安全工具和运行期工具。 开发、编译、分发、安全工具: java、javac、javap:运行、编译、反编译,最常用的三个命令 javado
阅读全文