随笔分类 - java
java基础知识
jvm
摘要:上一篇说明了RocketMQ怎么支持broker集群的,这里接着说RocketMQ实现高可用的手段之一——冗余。 RocketMQ部署的时候一个broker set会有一个mater和一个或者多个slave,salve起到的作用就是同步master存储的的消息,并且会接收部分consumer读取消息
阅读全文
摘要:问题 dubbo内部定制的版本中,在处理大于10K的包的时候,会出现内存溢出的现象 原因是我们在定制dubbo http协议的时候,使用了jboss包里面的HttpRequestDecoder的http decoder方法来解析http协议内容 该方法在解析非http协议的大内容时,会出现内存溢出的
阅读全文
摘要:RocketMQ的主要特点以及实现方式 单机支持1万以上持久队列 所有数据单独存储到一个CommitLog,完全顺序写,随机读 在一个broker上一个DefaultMessageStore管理一个commitLog 顺序写:在commitLog.putMessage里面获取mapedFile之后进
阅读全文
摘要:Consumer consumer pull message 订阅 在Consumer启动之前先将自己放到一个本地的集合中,再以后获取消费者的时候会用到,同时会将自己订阅的信息告诉broker 接收消息 consumer启动的时候会启动两个service: RebalanceService:主要实现
阅读全文
摘要:Producer 消息发送 producer start producer启动过程如下图 消息发送流程 消息发送过程:先由producer封装通过netty发送到broker,然后由broker进行保存,过程如下 ============================= producer发送消息
阅读全文
摘要:NameServer 作用:Producer和Consumer获取Broker的地址 目的:解耦Broker和Producer、Consumer 原理:使用netty作为通信工具,监听指定端口,如果是broker注册,将broker的信息保存在内存中并保存到文件中,producer和consumer
阅读全文
摘要:RocketMQ quikstart 获取源码 编译打包 这是一个maven工程,官方给出了编译打包的脚本install.sh,主要就是 生成idea工程文件 生成工程文件就可以使用IDE直接打开 设置环境变量 上面创建了devenv软连接 cd devenv 将devenv目录作为ROCKETMQ
阅读全文
摘要:HashMap 无序(每次resize的时候都会变) 非线程安全 key和value都看可以为null 使用数组和链表实现 查找元素的时候速度快 几个重要属性: loadFactor:用来计算threshold threshold:决定map是否需要扩容,threshold = capacity l
阅读全文
摘要:ArrayList ArrayList是基于数组实现的List 是有序的 每次添加之前判断是否进行扩容 不是线程安全的。 构造方法 add 在查看add方法之前,先看看ArrayList父类AbstractList的一个属性modCount modCount是用来记录list改变的次数(add,re
阅读全文
摘要:ScheduledThreadPoolExecutor 该类继承自ThreadPoolExecutor,增加了定时执行线程和延迟启动的功能,这两个功能是通过延时队列DelayedWorkQueue辅助实现的。 线程池里面的线程需要从队列里面获取任务,任务根据延时时长是有顺序的,线程池的线一直获取延时
阅读全文
摘要:线程池 线程池处理流程 核心线程池:创建新线程执行任务,需要获取全局锁 队列:将新来的任务加入队列 线程池:大于corePoolSize,并且队列已满,小于maxPoolSize,创建新的worker执行任务 线程池已满(达到max)处理策略:大于线程最大处理能力,大于maxPoolSize,选择拒
阅读全文
摘要:ThreadLocal 先来看看ThreadLocal的注释: This class provides thread local variables . These variables differ from their normal counterparts in that each thread
阅读全文
摘要:ConcurrentLinkedQueue 在考虑并发的时候可以先考虑单线程的情况,然后再将并发的情况考虑进来。 比如ConcurrentLinkedQueue: 1. 先考虑单线的offer 2. 再考虑多线程时候的offer: 多个线程offer 部分线程offer,部分线程poll offer
阅读全文
摘要:ConcurrentHashMap ConcurrentHashMap 结构 采用了分段锁的方法提高COncurrentHashMap并发,一个map里面有一个Segment数组——即多个Segment,一个Segment有一个HashEntry数组——即多个HashEntry。每个Segment持
阅读全文
摘要:锁 锁就是一种状态,比如互斥锁:同一时间只能有一个线程拥有,可以使用一个整型值来标志当前的状态 0:表示没有现成占有锁 1:表示锁已经被占用 AbstractQueuedSynchronizer 实现Java中锁的基础,提供了一系列模板方法,程序员可以继承该类作为内部类实现自定义同步语义。 通过一个
阅读全文
摘要:JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息。两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操作发生的相对顺序。共享内存的同步是显式的,消息传递的同步是隐式的,因为消息发送必须在消息接受之前,已
阅读全文
摘要:线程同步基础 synchronized 和volatile是Java线程同步的基础。 synchronized 将临界区的内容上锁,同一时刻只有一个进程能访问该临界区代码 使用的是内置锁,锁一个时刻只能被一个线程持有,可以重入(表示一个处于synchronized代码中的线程可以进入另外一个使用sy
阅读全文
摘要:最近项目已经要提测了,有时间来考虑一些性能上的事儿了。之前拜读过《深入理解java虚拟机》,只可惜当时功力尚浅,有些东西还是不太懂,而且应用场景也没有,所以借这次机会看看。当然了,这次并不包含什么深入的技术内容,只是使用VisualVM来连接远程的Tomcat,先摆好姿势。 VisualVM Vis
阅读全文

浙公网安备 33010602011771号