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