网络通信:协议TCP/IP,UDP/Ip,Multicast
IO:BIO,NIO-Reactor,AIO-Proactor
消息方式的系统间通信:
基于Java包:TCP/IP(Socket、ServerSocket;SocketChannel、ServerSocketChannel)
UPD/IP(DatagramSocket、DatagramPacket;DatagramChannel、DatagramPacket)
Mutilcast(MulticastSocket、DatagramPacket)
SRM
基于开源框架:Mina,Netty
性能角度:连接管理(连接池、连接复用、短连接、长连接)
远程调用方式的系统间通信:基于Java包(RMI(UnicastRemoteObject,LocateRegistry),Webservice)
基于开源框架(Spring RMI,Apache CXF)
性能角度(反射,序列化、反序列化)
深入理解JVM
JAVA代码的执行:代码编译为class——sun.jdk中的javac,装载class——ClassLoader,执行class(解释执行、编译执行(client complier,server complier)
内存空间:方法区、堆、JVM方法栈、本地方法栈和PC寄存器
内存分配:堆上的分配、TLAB分配、栈上的分配
内存回收:算法(Copy,Mark-sweep,mark-compact)
Sun JDK 实现(分代回收,GC参数,G1)
内存状态分析:jconsole、visualvm、jstat、jmap、MAT
线程资源同步和交互机制:
资源同步机制:synchronized实现、lock/unlock
线程交互机制:Object.wait/notify/notifyAll ——Double check pattern
并发包提供的交互机制——semaphore、CountdownLatch
线程状态及分析方法:jstack、TDA
Sun JDK:
集合包:List(ArrayList,LinkedList,Vector,Stack),Set(HashSet,TreeSet),Map(HashMap,TreeMap)
并发包:ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet,ArrayBlockingQueue,AtomicInteger,ThreadPoolExecutor,Executors,FutureTask,Semaphore,CountDownLatch,CyclicBarrier,ReentrantLock,Condition,ReentrantReadWriteLock
序列化,反序列化
性能调优:
1,先粗粒度划分,在细粒度寻找具体点
2,设定调优目标
3,根据现状衡量目前系统资源的瓶颈,需找消耗资源的代码,寻找执行慢的原因和代码
(CPU(us(代码循环、计算量大等),sy(线程上下文,线程多,IO等待多)))
(文件IO(并发读写多,文件大))
(内存(JVM堆内存(创建了多个对象,持有了不必要的引用),JVM以外的内存(创建了太多的线程,使用了BYTEBUFFER但未释放))
(网络IO(读写网络操作太频繁))
(访问量不大(锁竞争激烈,未充分使用硬件资源,数据量大))
4,性能调优(a针对系统资源消耗过多的优化;b资源消耗不多,但执行慢)
a:cpu:适当释放CPU,wait/notify机制,JVM和内存的优化;降低锁竞争,coroutine;文件IO:异步,限流,限制文件大小;内存,GC调优,JVM堆的代大小调优,释放不需要引用的对象,对象缓冲池
b:降低锁竞争(lock-freem,拆分锁,copyOnWrite),充分使用硬件(充分使用多个CPU,充分使用内存)
构建高可用:避免单点,提高应用的可用性
负载均衡技术:选址,filover,响应返回方式(NAT,IP-Tuneling,DSR),硬件负载,软件负载VRRP,去中心化实现软件负载gossip
热备:Linux HA等
使用多机房
提高可用性:报警系统,日志记录和分析系统,水平伸缩,拆分,读写分离,其他
构建可伸缩的系统
垂直伸缩:支撑高访问量(增加CPU(锁问题,线程数随CPU增加的问题),增加内存(cache设置为内存比率的问题))
支撑大数据量:分表
提升计算能力:并行多线程计算
水平伸缩:SNA,有状态的情况(存在内存的状态(用户身份)广播同步,分布式缓存,terracotta),文件(上传的文件(存储设备,SAN文件系统,分布式文件系统));伸缩带来的数据库问题(cache,分库,异步数据库访问,中间层DAL)
支撑大数据量:性能压力(读写)读写分离,多master
提升计算能力:mapreduce,MPI
类加载机制:装载--链接(校验,准备,解析)--初始化