JAVA知识点大全
2022-07-05 10:33:26 0 举报
AI智能生成
超全的JAVA知识点,以思维导图的方式从浅入深的梳理各项知识点
作者其他创作
大纲/内容
云原生
Devops
K8S
Docker
操作系统
Linux
Windows
Unix
项目管理
JIRA
Git
Wiki
TeamMark
Nacos
定时服务
Quartz
Elastic-Job
Xxl-Job
Saturn
TBSchedule
消息中间件
ActiveMQ
RocketMQ
RabbitMQ
Kafka
负载均衡
F5
Nginx
DNS
大数据
实时分析
Spark
Flink
Storm
离线分析
HDFS
Hbase
Hive
Oozie
Yarn
Sqoop
Flume
MapReduce
时序数据
TDengine
Open TSDB
InfluxDB
Kdb+
Graphite
开发工具
Eclipse
MyEclipse
IDEA
数据存储
关系型数据库
Mysql
Oracle
DB2
SQL Server
Hbase
非关系型数据库
MongoDb
Cassandra
Neo4j
缓存数据库
Reids
Ehcache
搜索服务
Solr
IK Analyzer
ES
Mmseg4j
Ansj
JAVA
JVM
JMM
可见性
原子性
有序性
GC
触发方式
GC方式
Partial GC
Minor GC
Eden
Young GC
Eden,s0,s1
Old GC
只收集old gen的GC。只有CMS的concurrent collection是这个模式
G1特有-Mixed GC
MajorGC
FullGC
触发方式
调用System.gc时,系统建议执行Full GC,但是不必然执行
老年代空间不足
方法区空间不足
通过Minor GC后进入老年代的平均大小大于老年代的可用内存
由Eden区、survivor space1(From Space)区向survivor space2(To Space)区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
收集器
新生代收集器
Serial
ParNew
Parallel Scavenge
老年代收集器
Serial Old
Parallel Old
CMS
整堆收集器
G1
对象存活判断方式
引用计数法
引用链法
可以作为 GC Roots 的对象
虚拟机栈中引用的对象
方法区类静态属性引用的对象
方法区常量池引用的对象
本地方法栈 JNI 引用的对象
SafePoint
GC 的时候必须要等到 Java 线程都进入到 safepoint 的时候 VMThread 才能开始
执行 GC
执行 GC
收集算法
标记清除
标记整理
复制算法
分代收集
三色标记
基本算法
白色
尚未被GC访问过的对象,如果全部标记已完成依旧为白色的,称为不可达对象,既垃圾对象。
黑色
本对象已经被GC访问过,且本对象的子引用对象也已经被访问过了。
灰色
本对象已访问过,但是本对象的子引用对象还没有被访问过,全部访问完会变成黑色,属于中间态。
多标-浮动垃圾
一个本应该是垃圾的对象被视为了非垃圾
漏标-读写屏障
解决方案
增量更新(Incremental Update)
原始快照(SATB,Snapshot At The Beginning)
方案抉择
G1使用的是原始快照
CMS使用的是增量更新
JVM内存模型
线程共享
方法区
类型信息
域(成员变量)信息
方法信息
静态变量
JIT代码缓存
运行时常量池
字面量
符号引用
堆
Eden
survival
from
to
Old
线程私有
栈
栈帧
局部变量表
基本数据类型
returnAddress 类型
对象引用
非static方法0号位为this
操作数栈
动态链接
方法返回地址
本地方法栈
程序计数器
内存调试工具
自身命令工具
jmap
jmap [-F] -dump:live,format=b,file=/tmp/a pid
jmap [-F] -histo pid
jmap [-F] heap pid
jstack
jstack [-F] [-l] pid
jhat
jhat file
jps
jps -l
jinfo
jinfo pid
jstat
jstat -gc pid 5000 1000
jstat -gcutil pid 5000 1000
jstack -class pid 5000 1000
外部工具
jconsole
jvisualvm
mat
参数设置
-XX:MaxTenuringThreshold
类加载
类加载过程
1.加载
2.验证
3. 准备
4.解析
5.初始化
6.使用
7.卸载
代理模式
双亲委托机制
主动使用的情况(6种)
1、创建类的实例
2、访问类的静态变量
3、调用类的静态方法
4、反射加载
5、初始化一个类的子类
6、java虚拟机启动时被标记为启动类的类
类加载器
1. 启动类加载器(Bootstrap ClassLoader)用来加载 java 核心类库,无法被 java 程序直接
引用。
引用。
2. 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实
现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
3. 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)
来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。
来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。
4. 用户自定义类加载器,通过继承 java.lang.ClassLoader 类的方式实现。
线程上下文类加载器
Tomcat服务器的类加载器
数据结构
List
ArrayList
类内部定义
静态常量
int DEFAULT_CAPACITY = 10
Object[] EMPTY_ELEMENTDATA = {}
Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}
int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8
局部变量
Object[] elementData
int size
构造方法
ArrayList()
ArrayList(int initialCapacity)
ArrayList(Collection<? extends E> c)
数据结构
Object[]
Add
LinkedList
HashTable
Map
HashMap
HashSet
ConcurrentHashMap
TreeMap
JUC
锁
Lock
Synchronized
CAS
通讯协作
Volatile
Fork/Join
Condition
Semaohrone
Queue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
SynchronousQueue
线程
Runnable
Thread
Callable
线程池
Executor
Executors
ExecutorService
ThreadPoolExecutor
IO
BIO
NIO
AIO
框架
开发框架
Spring
IOC
AOP
DI
SpringBoot
Spring cloud
Servlet
持久层框架
Ibatis
MyBatis
MyBatis Plus
Hibernate
MVC框架
Struts
Spring MVC
分布式
Dubbo
Zookeeper
Eureka
Feign
Ribbon
Hystrix
网关
Zuul
GateWay
0 条评论
下一页