随笔分类 -  JVM&多线程&高并发&GC

摘要:需求背景 同事问了个问题,java中有什么办法让我异步查询多个表的数据,最后将所有结果进行处理输出 想到future是解决这类问题常用的,于是写了个demo给他参考 简化需求 定义3个任务分别获取1个字符串,每个任务耗时300ms 最后进行合并输出 直接代码 package future; impo 阅读全文
posted @ 2022-04-25 18:42 杨海星 阅读(1914) 评论(0) 推荐(1)
摘要:四、 Java并发编程基础 本章将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同 的通信方式,最后通过简单的线程池示例以及应用(简单的Web服务器)来串联本章所介绍的内容。 4.1 线程 4.1.2 为什么要使用多线程 (1)利用更多的处理器核心 (2)更快的响应时间 (3)更好的编 阅读全文
posted @ 2021-06-30 17:03 杨海星 阅读(45) 评论(0) 推荐(0)
摘要:三、Java内存模型 本章大致分四个部分: Java内存模型的基础:主要介绍内存模型相关的基本概念; Java内存模型中的顺序一致性:主要介绍重排序与顺序一致性内存模型; 同步原语:主要介绍3个同步原语(synchronized、volatile和final)的内存语义及重排序规则在处理器中的实现; 阅读全文
posted @ 2021-06-30 16:57 杨海星 阅读(215) 评论(0) 推荐(0)
摘要:二、Java并发机制底层原理 volatile synchronized 原子操作 2.1 volatile原理与应用 2.1.1 特点 轻量级的 synchronized 共享变量的“可见性”(定义):如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的 阅读全文
posted @ 2021-05-26 22:53 杨海星 阅读(74) 评论(0) 推荐(0)
摘要:一、并发编程问题与解决 上下文切换 死锁 资源限制 1.1 上下文切换 1.1.1 问题 CPU通过时间片分配算法来循环执行任务,当前任务一个时间片执行完后会切换到下一个 任务,要保存上一个任务的状态,有一定的开销 多线程不一定快 - 因为上下文切换的开销 1.1.2 解决 无锁并发编程:根据id将 阅读全文
posted @ 2021-05-26 22:50 杨海星 阅读(66) 评论(0) 推荐(0)
摘要:一、pageCache 1.FileOutputStream与BufferedOutputStream的主要区别 系统调用次数区别,前者频繁调用造成频繁的用户态和内核态的切换,后者每8KB调用一次内核 - BufferOutputStream jvm 8kB syscall write(8KBbyt 阅读全文
posted @ 2021-03-14 22:49 杨海星 阅读(215) 评论(0) 推荐(0)
摘要:单机部署 安装配置zookeeper tar zxf zookeeper-3.4.10.tar.gz -C /usr cp zoo-sample.cfg zoo.cfg vi zoo.cfg dataDir=/root/zkdata #启动 ./bin/zkServer.sh start zoo.c 阅读全文
posted @ 2020-08-08 00:15 杨海星 阅读(200) 评论(0) 推荐(0)
摘要:基本特点 异步解耦、削峰填谷 Topic 分区/分区备份,集群互为某分区备份 broker控制,分区leader/follower 单分区保证消息时间顺序 offset,分区内消息编号,便于不同消费者记录读写位置 consumerGroup 同一逻辑消费者,设置小于分区数,均分分区消费消息 高并发的 阅读全文
posted @ 2020-08-07 00:41 杨海星 阅读(95) 评论(0) 推荐(0)
摘要:运行时数据区五个部分 方法区 堆 程序计数器 本地方法栈 虚拟机栈 生命周期的区别 方法区和堆是随虚拟机启动创建,对应一个进程的生命周期 程序计数器、本地方法栈、虚拟机栈是随着线程创建,线程结束销毁,对应一个线程的生命周期 详细参考:https://www.cnblogs.com/wlwl/p/94 阅读全文
posted @ 2020-07-16 13:52 杨海星 阅读(120) 评论(0) 推荐(0)
摘要:JVM class文件格式 魔法数 CAFE BABE 编译器版本号 Constant count Constant pool access flag this class super class interface count interfaces field count fields metho 阅读全文
posted @ 2020-07-01 19:12 杨海星 阅读(154) 评论(0) 推荐(0)
摘要:java中的引用 引用的分类主要跟垃圾回收机制相关 强引用 普通引用都是强引用,需要手动置为null时会回收 Object o = new Object(); o = null; System.gc() 软引用 软引用在内存不足时会回收,多用于缓存,被回收不影响正常流程 SoftReference< 阅读全文
posted @ 2020-06-17 19:57 杨海星 阅读(158) 评论(0) 推荐(0)
摘要:什么是AQS ReentrantLock的底层实现 支持尝试获取锁 支持重入 支持打断 支持多条件 支持公平锁和非公平锁 支持共享锁和排他锁 怎么做到的 使用了模板方法实现tryAcquire 子类Sync实现 通过CAS操作state的值,state为volatile修饰,线程可见 state为0 阅读全文
posted @ 2020-06-17 19:01 杨海星 阅读(151) 评论(0) 推荐(0)
摘要:volatile作用、特点 线程可见性 一个线程修改了volatile修饰的对象,强制失效其他线程的缓存,必须从主存读取。 原理: lock指令:设置LOCK 信号能保证某个处理器对共享内存的独占使用; 使得本CPU的Cache写入内存,该写入动作也会引起别的CPU cache line inval 阅读全文
posted @ 2020-05-14 20:40 杨海星 阅读(140) 评论(0) 推荐(0)
摘要:仅作为个人记录知识点用 1 用户态与内核态 2 CAS Unsafe native方法(C++实现) 汇编指令 lock cmpxchg 锁总线(硬件锁) 硬件锁:MESI、内存屏障 避免系统调用 3 synchronized锁 new Object()内存四个方面 markword Class p 阅读全文
posted @ 2020-05-13 22:32 杨海星 阅读(150) 评论(0) 推荐(0)