JVM
JVM虚拟机: 由类装载子系统, 运行时数据区(jvm内存模型), 执行引擎三部分组成.
java程序运行时,类字节码文件.class首先由类装载子系统加载到运行时数据区,在通过执行引擎来执行运行时数据区中的字节码.
运行时数据区(java内存模型): 堆, 栈(线程), 本地方法栈, 方法区(原数据),程序计数器组成.
线程私有(每个线程都有一个): 栈, 本地方法栈, 程序技术器
线程共有(所有线程共享): 堆, 方法区
栈: 局部变量表, 操作数栈, 动态链接, 方法出口组成.
局部变量表:存放类中的局部变量的区域.
操作数栈:执行临时运算的区域
动态链接:存放方法的内存地址
方法出口:方法执行完之后的出口,下一个方法的入口
程序计数器: 代码运行位置的行号(javap 命令编译后可以看到编译后的代码行号)
堆:
年轻代: 默认占堆内存的1/3, 由1有个Eden区两个Survivor区(1:1:8)
老年代: 默认占堆内存的2/3
垃圾回收: 主要指的堆内存中的垃圾回收
1:可达性分析算法:将"GC Roots"对象作为起点,从这些节点开始向下搜索引用的对象,将找到的对象标记为非垃圾对象,其余未标记的对象都是垃圾对象.
GC Roots根节点: 线程栈的本地变量,静态变量,本地方法栈中的变量等等.
年轻代的垃圾回收是minor GC,由字节码执行引擎开启垃圾收集线程来进行垃圾回收.
Eden区满了之后发生minor GC,先将年轻代中存活的对象复制到一个survivor区,然后将Eden区和另一个Survivor区中的所有对象清空,同时将存活的对象年龄+1,当存活的对象年龄超过15(默认,可设置)后,将其移入到老年代中.
老年代的垃圾回收是full GC.如果full GC之后,内存仍然不够用,则会发生OOM.
JVM调优:目的是减少full GC的次数,或者减少full GC的时长.因为full GC的时候会发生STW.
STW: stop the world,是指发生full GC的时候,JVM会将用户线程冻结的一种现象.
STW:stop the world :GC的时候(yong GC 和 full GC)会停掉用户线程(用户发起的线程),目的是为了快速完成GC,因为用户线程如果继续执行, 那么对于这些线程中的数据可能一会是垃圾对象,一会又会重新生成(过程垃圾现象),会造成干扰(GC又需重新排查所有对象)
调优:根据系统业务每秒产生的对象个数及大小,评估年轻代和老年代内存分配比例,使朝生夕死的对象的GC发生在年轻代,防止老年代放入太多朝生夕死的对象而造成full GC.
Arthas: 1: disbord :大盘查看线程信息(),堆内信息,
2: thread ID : 查看线程对应的问题,能对应到具体代码
3: thread -b : 查看阻塞的线程信息.能对应到具体代码
Java基础:
为了面个好公司!拼了!3.5W字的Java面试题整理(答案+学习路线)上!-CSDN博客
破4!《我想进大厂》之Java基础夺命连环16问-CSDN博客
https://zhuanlan.zhihu.com/p/351761423
Kafak:
kafka如何保证不重复消费又不丢失数据_Kafka写入的数据如何保证不丢失?-CSDN博客
如何保证kafka消息不丢失_kafka会丢消息吗-CSDN博客
MQ:
ZooKeeper:
https://www.cnblogs.com/bigband/p/13574344.html
zookeeper中的选举机制_zk 选举时 可以对外提供服务吗-CSDN博客
Mysql:
《我要进大厂》之mysql夺命连环13问_mysql 可重复复读 写时加排他-CSDN博客
Redis:
Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单-CSDN博客
JVM:
多线程:
50个多线程面试题,你会多少?(一)_java多线程深度面试题-CSDN博客
Spring:
《我想进大厂》之Spring夺命连环10问_spring 夺命10连问-CSDN博客
微服务:
SpringCloudAlibaba常用组件_springcloudalibaba组件-CSDN博客
设计模式: