配色: 字号:
中级java知识总结
2020-11-09 | 阅:  转:  |  分享 
  
Java2020-11-09演讲人目录1JVM2Algorithm3Thread4DB5DesignPattern01JVMJVMGC类加载
机制内存模型常用指令JVMTIJVMGC123GC算法GS组件引用GC算法标记整理复制SerialOld/ParallelOldS
erial/ParNew/ParallelScanvage标记清除SerialOldGS组件SerialNewSerialOld
(FullGC默认收集器)ParallelScanvage+ParallelOldG1吞吐量优先,年轻代年老代都是并行收集不
区分年轻代年老代,弹性垃圾回收050103040206ParNewCMS线程执行到达SafePointSafeRegion开
始FullGC一般配合CMS响应时间优先并发清理,不停止用户线程,提高相应时间引用可达性分析算法(JVM使用)2014引用计
数算法(难解决循环引用)2015四种引用关系2016强、软、弱(Guava)、幻句柄池2017HotspotJVM使用的是直
接内存,为了更快的查找速度JVMAB双亲委派OSGI类加载机制类加载机制双亲委派双亲委派模型要求除了顶层的启动类加载器外,其余的
类加载器都应当有自己的父类加载器。OSGI问题:类加载器死锁或者在动态环境下的OutOfMemoryError问题假如bundl
eE不存在,则bundleC就不会被解析成功,会有错误消息提示为何未能解析;而不是报错ClassNotFoundException
或NoClassDefFoundError。在标准Java类加载模型中,总是会在classpath那一长串列表中进行查找;而OSG
i类加载器能立即知道去哪里找类常量池、方法区、永久代程序计数器D栈C堆BAJVM内存模型内存模型堆new对象栈虚拟机栈(线程私有
)方法变量方法递归调用过程,就是典型的进栈出栈的过程本地方法栈(JVMnative修饰的方法)方法变量方法递归调用过程,就是
典型的进栈出栈的过程如果线程正在执行的是Java方法,则这个计数器记录的是正在执行的虚拟机字节码指令地址,用于线程切换后的方法继
续执行01如果正在执行的是Native方法,则这个计数器值为空(Undefined),因为native不编译成字节码02内存模型
程序计数器内存模型常量池、方法区、永久代静态常量,静态类,字符串JVM常用指令123jstatjmapjstack常用指令jsta
tGC情况jmap堆内存现状(年轻代,年老代)找出大对象-histo:live|head-n10jstack线程堆栈(
查看死锁)JVMJVMTIClassLoader层的加解密JVMTIClassLoader层的加解密02Algorithm二叉树平
衡二叉树红黑树0103前后先序遍历B+树020102快速排序归并排序Algorithm排序0304冒泡排序二分查找03Thre
adThread线程池工具包线程间通信线层与进程ForkJoinPoolThreadPoolExecutorBThread线程池A
线程池ThreadPoolExecutornewFixedThreadPoolnewSchedualThreadPoolnewS
ingleThreadPoolnewCacheThreadPoolForkJoinPoolRecursiveTaskTask
1.fork()Task2.fork()1/2.join()Thread工具包内存栅栏可重入锁同步辅助类Atomic内存栅栏
volatile只能保证多线程间的可见性,多线程写还是有线程安全问题可以使用Thread.MemoryBarrier();自行操
作栅栏可重入锁synchronizedlocklock/unlock实现锁可获取锁持有状态,设置获取锁超时时间lock与syn
c区别可中断/可实现公平竞争lock与sync选择同步辅助类以下都基于AQShttps://www.cnblogs.com/
dolphin0520/p/3920397.htmlCountDownLatch保证多线程执行完毕,不能重复使用Cyclicba
rrier可重复使用的栅栏Semaphore5把钥匙,循环放钥匙,用完放回去,没有拿到钥匙则等着Phaser阶段器:switch
caseAtomicInteger/Long/BooleanAtomicInteger/Long/BooleanB工具包Atomi
cAThread线程间通信0102阻塞队列Exchanger线程间通信阻塞队列BlockingQueueExchangerThr
eadAB线层进程线层与进程线层与进程线层线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进
程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许
多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。进程进程是资源(CPU、内存等)分配的基本单位,它是
程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它
分配CPU时间,程序开始真正运行。04DBDB0102MySQLHBase/MongoDBMySQL存储引擎B+树存储数据事务隔离
级别ABC存储引擎MyISAMInnoDB事务原理MVCC多版本并发控制MySQLB+树存储数据ACID05未提交读(Read
Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据04读已提交(ReadCommitted):只
能读取到已经提交的数据。Oracle等多数数据库默认都是该级别(不重复读)0302可重复读(RepeatedRead):可重复
读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
01串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞MySQL事务隔离级别05DesignPatternDesignPattern观察者工厂模式简单工厂普通工厂责任链单例装饰器代理感谢聆听
献花(0)
+1
(本文系职场细细品原创)