JVM核心原理和性能优化总结

对象什么时候进入老年代?

  • 一个对象在年轻代里躲过15次垃圾回收,年龄太大了,进入老年代
  • 对象太大了,超过了一定的阈值,直接进入老年代,不走年轻代
  • 一次Young GC过后存活对象太多了,导致Survivor区域放不下了,这批对象会进入老年代
  • 可能几次Young GC过后,Surviovr区域中的对象占用了超过50%的内存,此时会判断如果年龄1+年龄2+年龄N的对象总和超过了Survivor区域的50%,此时年龄N以及之上的对象都进入老年代,这是动态年龄判定规则

老年代的GC是如何触发的?

一旦老年代对象过多,就可能会触发Full GC,Full GC必然会带着Old GC,也就是针对老年代的GC,而且一般会跟着一次Young GC,也会触发永久代的GC。

  • 老年代自身可以设置一个阈值,有一个JVM参数可以控制,一旦老年代内存使用达到这个阈值,就会触发Full GC,一般建议调节大一些,比如92%;
  • 在执行Young GC之前,如果判断发现老年代可用空间小于了历次Young GC后升入老年代的平均对象大小的话,那么就会在Young GC之前触发Full GC,先回收掉老年代一批对象,然后再执行Young GC;
  • 如果Young GC过后的存活对象太多,Survivor区域放不下,就要放入老年代,要是此时老年代也放不下,就会触发Full GC,回收老年代一批对象,再把这些年轻代的存活对象放入老年代中。

触发Full GC几个比较核心的条件就是这几个,总结起来,其实就是老年代一旦快要搞满了,空间不够了,必然要垃圾回收一次。

正常情况下GC频率

正常情况下的系统,会有一定频率的Young GC,一般在几分钟一次Young GC,或者几十分钟一次Young GC,一次耗时在几毫秒到几十毫秒的样子,都是正常的。
正常的Full GC频率在几十分钟一次,或者几个小时一次,一天一次,几天一次,这个范围内都是正常的,一次耗时应该在几百毫秒的样子。

用jstat等工具去观察JVM的运行内存模型:
Eden区的对象增长速率多块?
Young GC频率多高?
一次Young GC多长耗时?
Young GC过后多少对象存活?
老年代的对象增长速率多高?
Full GC频率多高?
一次Full GC耗时?

频繁Full GC的几种常见原因
系统承载高并发请求,或者处理数据量过大,导致Young GC很频繁,而且每次Young GC过后存活对象太多,内存分配不合理,Survivor区域过小,导致对象频繁进入老年代,频繁触发Full GC。
系统一次性加载过多数据进内存,搞出来很多大对象,导致频繁有大对象进入老年代,必然频繁触发Full GC
系统发生了内存泄漏,莫名其妙创建大量的对象,始终无法回收,一直占用在老年代里,必然频繁触发Full GC
Metaspace(永久代)因为加载类过多触发Full GC
误调用System.gc()触发Full GC

如果jstat分析发现Full GC原因是第一种,那么就合理分配内存,调大Survivor区域即可。
如果jstat分析发现是第二种或第三种原因,也就是老年代一直有大量对象无法回收掉,年轻代升入老年代的对象并不多,那么就dump出来内存快照,然后用MAT工具进行分析即可

如果jstat分析发现内存使用不多,还频繁触发Full GC,必然是第四种和第五种,此时对应的进行优化即可。
 

JVM参数模板
-Xms4096M -Xmx4096M -Xmn3072M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFaction=92 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSParallelInitialMarkEnabled -
XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/app/oom

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea
Docker —— 从入门到实践 - v1.0.pdf Dubbo部署文档.doc Dubbo面试专题.docx java后端面试题答案.pdf Java并发Fork-Join框架原理解析.docx JAVA核心知识整理.pdf JAVA核心知识点整理.pdf Java面试笔记.docx JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记.docx mybatis原理.docx MyBatis面试专题.docx MyBatis面试专题及答案.pdf Mybatis面试题(含答案).pdf MySQL性能优化的21个最佳实践.pdf mysql面试专题.docx MySQL面试题(含答案).pdf Netty面试专题.docx Nginx实战.pdf ORACLE数据库SQL语句编写优化总结.pdf Redis面试题(含答案).docx Redis面试题(含答案).pdf solr索引搜索.docx Spring Boot实战 .pdf Spring Boot面试专题.docx Spring Cloud面试专题.docx SpringBoot面试专题及答案.pdf SpringCloud面试专题及答案.pdf SpringMVC面试专题.docx Spring全家桶知识笔记.pdf Spring源码分析.pdf Spring面试专题.docx Spring面试专题及答案.pdf Spring面试题(含答案).pdf Tomcat面试专题.docx vivo2021届春季招聘在线编程考试.docx 哔哩哔哩2021招聘后端笔试卷(一).docx 哔哩哔哩2021招聘后端笔试卷(二).docx 多线程面试59题(含答案).pdf 多线程面试专题及答案.pdf 完整面试题(含答案).pdf 小米2021软件开发工程师笔试题一.docx 小米2021软件开发工程师笔试题二.docx 并发编程面试专题.docx 微服务面试专题及答案.pdf 快手2021招聘秋招笔试--工程A试卷.docx 快手2021招聘秋招笔试--工程B试卷.docx 快手2021招聘秋招笔试--工程C试卷.docx 拼多多2021部分编程题合集.docx 数据库面试专题及答案.pdf 正则表达式.pdf 消息中间件面试专题及答案.pdf 深入浅出Redis.pdf 爱奇艺2021Java方向笔试题.docx 爱奇艺2021Java方向笔试题(第一场).docx 看透springMvc源代码分析与实践.pdf 网易2021招聘笔试- 系统开发研发工程师(提前批).docx 网易2021笔试- Java 开发工程师(提前批).docx 网易2021笔试- Java 开发工程师(正式批).docx 网易2021笔试- 系统开发研发工程师(正式批).docx 美团点评2021校招后台开发方向笔试题.docx 美团点评2021系统开发方向笔试题.docx 腾讯2021招聘-后台.docx 设计模式面试专题及答案.pdf 详细解析_Log4j_配置 .docx 阿里百度美团面试题集合.pdf 面试宝典.pdf
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ....................................................................................................................................................... 19 2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ................................................................................................................ 22 2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...................................................................................... 23 2.2.5. 方法区/永久代(线程共享) ..................................................................................................... 23 2.3. JVM 运行时内存 ................................................................................................................................. 24 2.3.1. 新生代 .......................................................................................................................................... 24 2.3.1.1. 2.3.1.2. 2.3.1.3. 2.3.1.4. Eden 区 .................................................................................................................................................... 24 ServivorFrom........................................................................................................................................... 24 ServivorTo .............................................................................................................................................. 24 MinorGC 的过程(复制->清空->互换) ....................................................................................... 24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1................................................................................... 25 2:清空 eden、servicorFrom............................................................................................................................. 25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 .............................................................................................................................. 26 2.4.1.1. 引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 .......................................................................................................................................... 25 永久代 .......................................................................................................................................... 25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与法 .................................................................................................................................. 26 2.4.2. 2.4.3. 2.4.4. 2.4.5. 2.4.5.1. 2.4.5.2. 2.6.1. 2.6.1.1. 2.6.1.2. 2.7.1. 2.7.2. 2.7.3. 2.7.4. 2.7.5. 2.7.6. 2.7.6.1. 标记清除法(Mark-Sweep) .............................................................................................. 27 复制法(copying)................................................................................................................. 27 标记整理法(Mark-Compact).................................................................................................. 28 分代收集法 .............................................................................................................................. 29 新生代与复制法 .............................................................................................................................. 29 老年代与标记复制法 ......................................................................................................................29 2.5. JAVA 四中引用类型 ........................................................................................................................... 30 2.5.1. 强引用 .......................................................................................................................................... 30 2.5.2. 软引用 .......................................................................................................................................... 30 2.5.3. 弱引用 .......................................................................................................................................... 30 2.5.4. 虚引用 .......................................................................................................................................... 30 2.6. GC 分代收集法 VS 分区收集法................................................................................................ 30 分代收集法 .............................................................................................................................. 30 在新生代-复制法............................................................................................................................. 30 在老年代-标记整理法.....................................................................................................................30 分区收集法 .............................................................................................................................. 31 2.7. GC 垃圾收集器 ................................................................................................................................... 31 2.6.2. Serial 垃圾收集器(单线程、复制法)................................................................................ 31 ParNew 垃圾收集器(Serial+多线程) ................................................................................... 31 .......................................................... 32 ........................................................................... 32 ......................................................................... 33 ..................................................................................... 33 初始标记 .............................................................................................................................................. 33 Parallel Scavenge 收集器(多线程复制法、高效) Serial Old 收集器(单线程标记整理法 ) Parallel Old 收集器(多线程标记整理法) CMS 收集器(多线程标记清除法) 2.7.6.2. 2.7.6.3. 2.7.6.4. 2.8.1. 2.8.2. 2.8.3. 2.8.4. 2.8.5. 2.8.1. 2.8.2. 2.8.2.1. 2.8.2.2. 2.8.3. 2.8.4. 2.8.5. 并发标记 .............................................................................................................................................. 34 重新标记 .............................................................................................................................................. 34 并发清除 .............................................................................................................................................. 34 G1 收集器 .................................................................................................................................... 34 2.8. JAVA IO/NIO ....................................................................................................................................... 34 2.7.7. 2.9. 2.9.2. 2.9.2.1. 2.9.2.2. 2.9.2.3. 2.9.3. 2.9.4. 2.9.4.1. 2.9.4.2. 阻塞IO模型 ................................................................................................................................ 34 ............................................................................................................................ 35 ........................................................................................................................ 35 ........................................................................................................................ 36 ................................................................................................................................ 36 .................................................................................................................................. 36 .................................................................................................................................... 37 NIO 的缓冲区 .....................................................................................................................................38 NIO 的非阻塞 .....................................................................................................................................38 ....................................................................................................................................... 40 非阻塞 IO 模型 多路复用 IO 模型 信号驱动 IO 模型 ............................................................................................................................................ 40 ........................................................................................................................................ 40 JVM 类加载机制 ................................................................................................................................. 41 2.9.1.1. 2.9.1.2. 2.9.1.3. 2.9.1.4. 2.9.1.5. 2.9.1.6. 2.9.1.7. 2.9.1.8. 加载 .......................................................................................................................................................... 41 验证 .......................................................................................................................................................... 41 准备 .......................................................................................................................................................... 41 解析 .......................................................................................................................................................... 41 符号引用 .............................................................................................................................................. 42 直接引用 .............................................................................................................................................. 42 初始化 ...................................................................................................................................................... 42 类构造器 .............................................................................................................................. 42 类加载器 ...................................................................................................................................... 42 启动类加载器(Bootstrap ClassLoader) ......................................................................................... 43 扩展类加载器(Extension ClassLoader)..........................................................................................43 应用程序类加载器(Application ClassLoader): ..........................................................................43 双亲委派 ...................................................................................................................................... 43 OSGI(动态模型系统) ............................................................................................................ 44 动态改变构造 ...................................................................................................................................... 44 模块化编程与热插拔 .......................................................................................................................... 44 3. JAVA集合............................................................................................................................................45 3.1. 接口继承关系和实现 .......................................................................................................................... 45 3.2. LIST ....................................................................................................................................................... 47 3.2.1. ArrayList(数组)....................................................................................................................... 47 3.2.2. Vector(数组实现、线程同步) ............................................................................................... 47 3.2.3. LinkList(链表) ......................................................................................................................... 47 3.3. SET ....................................................................................................................................................... 48 3.3.1.1. 3.3.1.2. HashSet(Hash 表) ............................................................................................................................. 48 TreeSet(二叉树) ................................................................................................................................ 49 LinkHashSet(HashSet+LinkedHashMap) ................................................................................... 49 3.3.1.3. 3.4. MAP....................................................................................................................................................... 50 3.4.1. HashMap(数组+链表+红黑树)............................................................................................. 50 3.4.1.1. JAVA7 实现 ............................................................................................................................................. 50 3.4.1.2. JAVA8 实现 ............................................................................................................................................. 51 3.4.2. ConcurrentHashMap.................................................................................................................. 51 3.4.2.1. 3.4.2.2. 3.4.2.3. 3.4.2.4. Segment 段.............................................................................................................................................. 51 线程安全(Segment 继承 ReentrantLock 加锁) .............................................................................. 51 并行度(默认 16) ................................................................................................................................. 52 Java8 实现 (引入了红黑树) .............................................................................................................. 52 13/04/2018 Page 2 of 283 异步IO模型 JAVA IO 包 JAVA NIO Channel Buffer Selector 3.4.3. HashTable(线程安全) ........................................................................................................... 53 3.4.4. TreeMap(可排序) .................................................................................................................. 53 3.4.5. LinkHashMap(记录插入顺序) .............................................................................................. 53 4. JAVA 多线程并发.................................................................................................................................54 4.1.1. JAVA 并发知识库 ....................................................................................................................... 54 4.1.2. JAVA 线程实现/创建方式 .......................................................................................................... 54 4.1.2.1. 4.1.2.2. 4.1.2.3. 4.1.2.4. 继承 Thread 类 ........................................................................................................................................ 54 实现 Runnable 接口。............................................................................................................................ 54 ExecutorService、Callable、Future 有返回值线程.............................................................55 基于线程池的方式................................................................................................................................... 56 4.1.3. 4 种线程池 ................................................................................................................................... 56 4.1.3.1. 4.1.3.2. 4.1.3.3. newSingleThreadExecutor ................................................................................................................. 58 4.1.4. 线程生命周期(状态) .................................................................................................................... 58 4.1.3.4. 4.1.4.1. 4.1.4.2. 4.1.4.3. 4.1.4.4. 新建状态(NEW) ................................................................................................................................. 58 就绪状态(RUNNABLE): ................................................................................................................. 59 运行状态(RUNNING): .................................................................................................................... 59 阻塞状态(BLOCKED):....................................................................................................................59 4.1.9.5. 4.1.9.6. 4.1.9.7. 13/04/2018 Semaphore 信号量 ................................................................................................................................. 68 ................................................................................................................................. 68 ................................................................................................................................................................ 68 ........................................................................................................................... 69 AtomicInteger .......................................................................................................................................... 69 Page 3 of 283 newCachedThreadPool ......................................................................................................................... 57 ............................................................................................................................. 57 newScheduledThreadPool .................................................................................................................... 58 newFixedThreadPool 等待阻塞(o.wait->等待对列): ...................................................................................................................... 59 .......................................................................................................................................... 59 ............................................................................................................................................ 59 线程死亡(DEAD)................................................................................................................................ 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 4.1.5. 终止线程 4 种方式 ...................................................................................................................... 60 同步阻塞(lock->锁池) 其他阻塞(sleep/join) 4.1.4.5. 4.1.5.1. 4.1.5.2. 4.1.5.3. 4.1.5.4. 正常运行结束........................................................................................................................................... 60 使用退出标志退出线程...........................................................................................................................60 Interrupt 方法结束线程 ........................................................................................................................... 60 stop 方法终止线程(线程不安全)....................................................................................................... 61 正常结束. 异常结束. 调用 stop 4.1.6. sleep 与 wait 区别....................................................................................................................... 61 4.1.7. start 与 run 区别 .......................................................................................................................... 62 4.1.8. JAVA 后台线程 ........................................................................................................................... 62 4.1.9. JAVA 锁 ....................................................................................................................................... 63 4.1.9.1. 4.1.9.2. 4.1.9.3. 乐观锁 ...................................................................................................................................................... 63 悲观锁 ...................................................................................................................................................... 63 自旋锁 ...................................................................................................................................................... 63 自旋锁的优缺点....................................................................................................................................................63 自旋锁时间阈值(1.6 引入了适应性自旋锁) .................................................................................................. 63 自旋锁的开启........................................................................................................................................................ 64 4.1.9.4. Synchronized 同步锁.............................................................................................................................. 64 ....................................................................................................................................... 64 ....................................................................................................................................... 64 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 ............................................................................................................................................... 64 ReentrantLock......................................................................................................................................... 66 ........................................................................................................................................... 66 ................................................................................................................................................................ 66 .................................................................................................................................................................... 67 ........................................................................................................................ 67 ............................................................................................................................................. 67 ......................................................................................................... 68 tryLock 和 lock 和 lockInterruptibly 的区别........................................................................................................ 68 Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized ReentrantLock 实现 Condition 类和 Object 类锁方法区别区别 实现互斥锁(计数器为 1) 代码实现 Semaphore 与 ReentrantLock 4.1.9.8. 4.1.9.9. 4.1.9.10. 4.1.9.11. 4.1.9.12. 4.1.9.14. 4.1.9.15. 4.1.9.16. 可重入锁(递归锁)............................................................................................................................... 69 公平锁与非公平锁................................................................................................................................... 70 ..................................................................................................................................................... 70 ........................................................................................................................................... 70 ReadWriteLock 读写锁......................................................................................................................70 ........................................................................................................................................................................ 70 ........................................................................................................................................................................ 70 公平锁(Fair) 非公平锁(Nonfair) 读锁 写锁 共享锁和独占锁 .................................................................................................................................. 70 .................................................................................................................................................................... 70 .................................................................................................................................................................... 70 重量级锁(Mutex Lock)................................................................................................................71 轻量级锁 .............................................................................................................................................. 71 锁升级.................................................................................................................................................................... 71 独占锁 共享锁 4.1.9.13. 偏向锁 .................................................................................................................................................. 71 分段锁 .................................................................................................................................................. 71 锁优化 .................................................................................................................................................. 71 减少锁持有时间 .................................................................................................................................................... 72 ............................................................................................................................................................ 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 4.1.10. 线程基本方法..............................................................................................................................72 减小锁粒度 锁分离 锁粗化 锁消除 4.1.10.1. 4.1.10.2. 4.1.10.3. 4.1.10.4. 4.1.10.5. 4.1.10.6. 4.1.10.7. 4.1.10.8. 线程等待(wait) ............................................................................................................................... 73 线程睡眠(sleep)............................................................................................................................. 73 线程让步(yield) .............................................................................................................................. 73 线程中断(interrupt)........................................................................................................................ 73 Join 等待其他线程终止 ...................................................................................................................... 74 为什么要用 join()方法? .................................................................................................................... 74 线程唤醒(notify)............................................................................................................................. 74 其他方法: .......................................................................................................................................... 74 4.1.11. 线程上下文切换..........................................................................................................................75 4.1.11.1. 4.1.11.2. 4.1.11.3. 4.1.11.4. 4.1.11.5. 4.1.11.6. 4.1.11.7. 进程......................................................................................................................................................75 上下文..................................................................................................................................................75 寄存器..................................................................................................................................................75 程序计数器 .......................................................................................................................................... 75 PCB-“切换桢”................................................................................................................................. 75 上下文切换的活动: .......................................................................................................................... 76 引起线程上下文切换的原因 .............................................................................................................. 76 4.1.12. 同步锁与死锁..............................................................................................................................76 4.1.12.1. 同步锁 .................................................................................................................................................. 76 4.1.12.2. 死锁 ...................................................................................................................................................... 76 4.1.13. 线程池原理..................................................................................................................................76 4.1.14.1. 4.1.14.2. 4.1.14.3. 4.1.14.4. 4.1.14.5. 4.1.14.6. 4.1.14.7. 4.1.14.8. 4.1.13.1. 4.1.13.2. 4.1.13.3. 4.1.13.4. 线程复用 .............................................................................................................................................. 76 ...................................................................................................................................... 76 .............................................................................................................................................. 78 ......................................................................................................................... 78 4.1.14. JAVA 阻塞队列原理.................................................................................................................... 79 线程池的组成 拒绝策略 Java 线程池工作过程 阻塞队列的主要方法 .......................................................................................................................... 80 ............................................................................................................................................................ 80 .................................................................................................................................................... 81 ............................................................................................................................. 81 ....................................................................................... 82 ......................................................................... 82 .............................................................. 82 .......................................................................................... 82 .............................................................. 83 ...................................................................................................................... 83 插入操作: 获取数据操作: Java 中的阻塞队列 ArrayBlockingQueue(公平、非公平) LinkedBlockingQueue(两个独立锁提高并发) PriorityBlockingQueue(compareTo 排序实现优先) DelayQueue(缓存失效、定时任务 ) SynchronousQueue(不存储数据、可用于传递数据) LinkedTransferQueue 13/04/2018 Page 4 of 283 4.1.14.9. LinkedBlockingDeque ..................................................................................................................... 83 4.1.15. CyclicBarrier、CountDownLatch、Semaphore 的用法 ........................................................ 84 4.1.15.1. 4.1.15.2. 4.1.15.3. ................................................................................................ 84 ............................................... 84 ....................................................................... 85 CountDownLatch(线程计数器 ) CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) Semaphore(信号量-控制同时访问的线程个数) 4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) ............................................................. 87 变量可见性............................................................................................................................................................ 87 禁止重排序............................................................................................................................................................ 87 ..................................................................................................................... 87 ................................................................................................................................................................ 87 4.1.17. 如何在两个线程之间共享数据...................................................................................................88 将数据抽象成一个类,并将数据的操作作为这个类的方法.............................................................................88 .................................................................................................................. 89 4.1.18. ThreadLocal 作用( )........................................................................................ 90 .............................................................................................................. 90 ................................................................................................................................................................ 91 4.1.19. synchronized 和 ReentrantLock 的区别 .................................................................................. 91 4.1.19.1. .................................................................................................................................. 91 4.1.19.2. .................................................................................................................................. 92 4.1.20. ConcurrentHashMap 并发......................................................................................................... 92 4.1.20.1. .......................................................................................................................................... 92 4.1.20.2. .......................................................................................................... 92 ................................................. 93 4.1.21. Java 中用到的线程调度 ............................................................................................................. 93 比 sychronized 更轻量级的同步锁 适用场景 Runnable 对象作为一个类的内部类 ThreadLocalMap(线程的一个属性) 线程本地存储 使用场景 两者的共同点: 两者的不同点: 4.1.21.1. 4.1.21.2. 4.1.21.3. 4.1.21.4. 减小锁粒度 ...................................................................................................................................... 93 ...................................................................................................................................... 93 ............................................................................................. 94 ..................................................................................................................... 94 4.1.22. 进程调度法..............................................................................................................................94 4.1.22.1. 4.1.22.2. 4.1.22.3. ...................................................................................................................................... 94 ...................................................................................................................... 95 .............................................................................................................. 96 )..................................................................96 .......................................................................................................................................... 96 ........................................................................... 97 ............................................................................................................................................. 98 4.1.24. 什么是AQS(抽象的队列同步器).........................................................................................98 Exclusive 独占资源-ReentrantLock ................................................................................................................... 99 Share 共享资源-Semaphore/CountDownLatch ............................................................................................... 99 同步器的实现是 ABS 核心(state 资源状态计数) ....................................................................................... 100 ReentrantReadWriteLock 实现独占和共享两种方式.....................................................................................100 5. JAVA基础..........................................................................................................................................101 4.1.23. 什么是CAS( 4.1.23.1. 4.1.23.2. 4.1.23.3. 5.1.1. 5.1.1.1. 5.1.1.2. 5.1.1.3. 5.1.1.4. JAVA 异常分类及处理.............................................................................................................. 101 .................................................................................................................................................... 101 ............................................................................................................................................ 101 ..................................................................................................................................................................... 101 ........................................................................... 101 ................................................................................................................................ 102 ......................................................... 102 .................................................................................................................. 102 ............................................................................................................ 102 13/04/2018 Page 5 of 283 ConcurrentHashMap 分段锁 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成 抢占式调度: 协同式调度: JVM 的线程调度实现(抢占式调度) 线程让出 cpu 的情况: 优先调度法 高优先权优先调度法 基于时间片的轮转调度法 比较并交换-乐观锁机制-锁自旋 概念及特性 原子包 java.util.concurrent.atomic(锁自旋) ABA 问题 概念 异常分类 Error Exception(RuntimeException、CheckedException) 异常的处理方式 遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) try catch 捕获异常针对性处理方式 Throw 和 throws 的区别: 位置不同 功能不同: 5.1.2. 5.1.2.1. 5.1.2.2. 5.1.2.3. 5.1.2.4. 5.1.2.5. 5.1.2.6. 5.1.2.7. 5.1.3. 5.1.4.1. 5.1.4.2. 5.1.4.3. 5.1.4.4. @Documented 描述-javadoc @Inherited 阐述了某个被标注的类型是被继承的 5.1.5.1. 5.1.5.2. 5.1.5.3. 5.1.5.4. 泛型方法() ............................................................................................................................. 112 泛型类 ............................................................................................................................................. 112 类型通配符? .......................................................................................................................................... 113 类型擦除 ................................................................................................................................................ 113 .............................................................................................................................................................. 102 .......................................................................................................................................................... 102 JAVA 反射 ................................................................................................................................. 103 ............................................................................................................................................ 103 ............................................................ 103 ................................................................................................................................ 103 .................................................................................................................................. 103 ...................................................................................................................... 104 .................................................................................................................................... 104 ............................................................................ 104 ..................................................................... 104 ............................................................................................................ 104 ....................................................................................................................... 104 ................................................................................ 104 ............................................................................ 104 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) 反射的应用场合 编译时类型和运行时类型 的编译时类型无法获取具体方法 Java 反射 API 反射 API 用来生成 JVM 中的类、接口或则对象的信息。 反射使用步骤(获取 Class 对象、调用对象方法) 获取 Class 对象的 3 种方法 调用某个对象的 getClass()方法 调用某个类的 class 属性来获取该类对应的 Class 对象 使用 Class 类中的 forName()静态方法(最安全/性能最好) 创建对象的两种方法 Class 对象的 newInstance() 调用 Constructor 对象的 newInstance() ........................................................................................................................ 105 ............................................................................................................................. 105 .......................................................................................................... 105 JAVA 注解 ................................................................................................................................. 106 5.1.3.1. 概念 ........................................................................................................................................................ 106 5.1.3.2. 4 种标准元注解...................................................................................................................................... 106 @Target 修饰的对象范围 ................................................................................................................................. 106 @Retention 定义 被保留的时间长短 ............................................................................................................... 106 ................................................................................................................................ 106 .............................................................................................. 106 5.1.3.3. 注解处理器............................................................................................................................................. 107 5.1.4. JAVA 内部类 ............................................................................................................................. 109 静态内部类............................................................................................................................................. 109 成员内部类............................................................................................................................................. 110 局部内部类(定义在方法中的类) ..................................................................................................... 110 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) ..... 111 5.1.5. JAVA 泛型 ................................................................................................................................. 112 5.1.6. JAVA 序列化(创建可复用的 Java 对象) ................................................................................. 113 .................................................................................................... 113 ................................................................................................. 113 .................................................................................................................................. 113 Serializable 实现序列化 .................................................................................................................................... 113 ............................................... 113 ................................................................................................ 113 ............................................................................................................................................................. 113 .................................................................................................................................. 114 .............................................................................................................................................. 114 ............................................................................................ 114 5.1.7. JAVA 复制 ................................................................................................................................. 114 5.1.7.1. ......................................................................................................................................... 114 5.1.7.2. ..................................................................................... 114 5.1.7.3. ................................................................................................. 115 5.1.7.4. ........................................................................................................ 115 6. SPRING 原理 ..................................................................................................................................... 116 6.1.1. Spring 特点................................................................................................................................ 116 6.1.1.1. 轻量级 ................................................................................................................................................ 116 13/04/2018 Page 6 of 283 保存(持久化)对象及其状态到内存或者磁盘 序列化对象以字节数组保持-静态成员不保存 序列化用户远程对象传输 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化 writeObject 和 readObject 自定义序列化策略 序列化 ID 序列化并不保存静态变量 序列化子父类说明 Transient 关键字阻止该变量被序列化到文件中 直接赋值复制 浅复制(复制引用但不复制引用的对象) 深复制(复制对象和其应用对象) 序列化(深 clone 一中实现) 6.1.1.2. 6.1.1.3. 6.1.1.4. 6.1.1.5. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. ............................................................................................................................................ 116 ............................................................................................................................................ 116 .................................................................................................................................................... 116 ............................................................................................................................................ 116 Spring 核心组件........................................................................................................................ 117 Spring 常用模块........................................................................................................................ 117 Spring 主要包............................................................................................................................ 118 Spring 常用注解........................................................................................................................ 118 Spring 第三方结合.................................................................................................................... 119 Spring IOC 原理........................................................................................................................ 120 6.1.7.1. 6.1.7.2. 6.1.7.3. 概念 ........................................................................................................................................................ 120 Spring 容器高层视图 ............................................................................................................................ 120 IOC 容器实现......................................................................................................................................... 120 控制反转 面向切面 容器 框架集合 BeanFactory-框架基础设施 .............................................................................................................................. 120 1.1..1.1.1 1.1..1.1.2 1.1..1.1.3 1.1..1.1.4 1.1..1.1.5 1.1..1.1.6 1.1..1.1.7 1.1..1.1.8 BeanDefinitionRegistry 注册表................................................................................................. 121 BeanFactory 顶层接口 .............................................................................................................. 121 ListableBeanFactory ................................................................................................................. 121 HierarchicalBeanFactory 父子级联.......................................................................................... 121 ConfigurableBeanFactory......................................................................................................... 121 AutowireCapableBeanFactory 自动装配 ................................................................................ 122 SingletonBeanRegistry 运行期间注册单例 Bean................................................................... 122 依赖日志框框.............................................................................................................................122 ApplicationContext 面向开发应用 .................................................................................................................... 122 WebApplication 体系架构 ................................................................................................................................. 123 6.1.7.4. Spring Bean 作用域.............................................................................................................................. 123 singleton:单例模式(多线程下不安全) ...................................................................................................... 123 prototype:原型模式每次使用时创建 ................................................................................................................ 124 Request:一次 request 一个实例 .................................................................................................................... 124 session ................................................................................................................................................................ 124 global Session....................................................................................................................................................124 6.1.7.5. Spring Bean 生命周期.......................................................................................................................... 124 实例化.................................................................................................................................................................. 124 IOC依赖注入......................................................................................................................................................124 setBeanName 实现............................................................................................................................................ 124 BeanFactoryAware 实现 ................................................................................................................................... 124 ApplicationContextAware 实现......................................................................................................................... 125 postProcessBeforeInitialization 接口实现-初始化预处理.......................................................................... 125 init-method .......................................................................................................................................................... 125 postProcessAfterInitialization ........................................................................................................................... 125 Destroy 过期自动清理阶段 ............................................................................................................................... 125 destroy-method 自配置清理 ............................................................................................................................. 125 6.1.7.6. Spring 依赖注入四种方式 .................................................................................................................... 126 构造器注入.......................................................................................................................................................... 126 setter方法注入...................................................................................................................................................127 静态工厂注入...................................................................................................................................................... 127 实例工厂.............................................................................................................................................................. 127 6.1.7.7. 5 种不同方式的自动装配...................................................................................................................... 128 6.1.8. Spring APO 原理 ...................................................................................................................... 129 6.1.8.1. 6.1.8.2. 6.1.8.1. 概念 ........................................................................................................................................................ 129 AOP 核心概念 ....................................................................................................................................... 129 AOP 两种代理方式 ............................................................................................................................... 130 JDK 动态接口代理 ............................................................................................................................................. 130 CGLib 动态代理.................................................................................................................................................. 131 6.1.8.2. 实现原理 ................................................................................................................................................ 131 6.1.9. Spring MVC原理......................................................................................................................132 6.1.9.1. MVC 流程............................................................................................................................................... 132 Http 请求到 DispatcherServlet ....................................................................................................................... 133 HandlerMapping 寻找处理器............................................................................................................................133 调用处理器 Controller........................................................................................................................................ 133 13/04/2018 Page 7 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.................................................................................133 DispatcherServlet 查询 ModelAndView .......................................................................................................... 133 ModelAndView 反馈浏览器 HTTP ................................................................................................................... 133 6.1.9.1. MVC 常用注解 ....................................................................................................................................... 133 6.1.10. Spring Boot 原理....................................................................................................................... 134 1. 创建独立的 Spring 应用程序............................................................................................................................. 134 2.嵌入的Tomcat,无需部署WAR文件.............................................................................................................134 3. 简化 Maven 配置 ................................................................................................................................................ 134 4. 自动配置 Spring ................................................................................................................................................. 134 5. 提供生产就绪型功能,如指标,健康检查和外部配置................................................................................... 134 6. 绝对没有代码生成和对 XML 没有要求配置 [1] ............................................................................................... 134 6.1.11. JPA 原理 .................................................................................................................................... 134 6.1.11.1. 事务....................................................................................................................................................134 6.1.11.2. 6.1.11.1. 6.1.11.1. 本地事务 ............................................................................................................................................ 134 分布式事务 ........................................................................................................................................ 135 两阶段提交 ........................................................................................................................................ 136 1 准备阶段........................................................................................................................................................... 136 2 提交阶段:....................................................................................................................................................... 136 6.1.12. Mybatis 缓存.............................................................................................................................. 137 6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别)..............................................................................138 6.1.12.2. 二级缓存原理(mapper 基本).....................................................................................................138 具体使用需要配置: .......................................................................................................................................... 139 6.1.13. Tomcat 架构 .............................................................................................................................. 139 7. 微服务 ................................................................................................................................................. 140 7.1.1. 服务注册发现 ............................................................................................................................ 140
### 回答1: JVM故障诊断与性能优化是一本关于Java虚拟机(JVM)故障排除和性能优化的高清PDF。它涵盖了JVM的基本原理以及在实际应用中可能遇到的故障和性能问题的解决方法。 首先,本书介绍了JVM的结构和工作原理,包括内存管理、垃圾收集、线程管理等方面。读者可以了解JVM是如何执行Java程序并管理资源的。 其次,本书重点讲解了JVM故障排查的方法和工具。它介绍了常见的JVM故障类型,如内存溢出、线程死锁等,并提供了相应的解决方法。此外,本书还介绍了一些常用的JVM排查工具,如jstack、jmap等,以帮助读者更好地分析和定位故障。 最后,本书还介绍了JVM性能优化的基本原则和方法。它讲解了如何分析应用的性能瓶颈,并提出了相应的优化建议。读者可以学习到如何合理配置JVM参数、如何优化代码和法等技巧,以提升应用的性能和响应速度。 总之,JVM故障诊断与性能优化是一本帮助读者解决Java应用中JVM故障和性能问题的实用指南。无论是初学者还是有一定经验的开发者,都能从中学到宝贵的知识和技巧,进一步提升自己在JVM故障排查和性能优化方面的能力。 ### 回答2: 《高清JVM故障诊断与性能优化》是一本介绍JVM故障诊断和性能优化的书籍。JVM(Java虚拟机)是Java语言的核心组成部分,负责将Java程序转化为可以在不同平台上运行的字节码程序。本书主要针对JVM在实际运行过程中可能出现的故障进行了深入探讨,并提供了一些性能优化的方法和技巧。 首先,本书介绍了JVM的基本架构和原理,包括类加载器、运行时数据区和垃圾收集器等。读者可以通过了解这些基本概念,更好地理解JVM的工作方式,从而更好地进行故障诊断和性能优化。 其次,本书介绍了一些常见的JVM故障现象和原因,比如内存溢出、死锁和线程问题等。对于每一种故障,书中都给出了具体的排查方法和解决方案,帮助读者快速解决实际中遇到的问题。 最后,本书重点介绍了JVM性能优化的方法和技巧。性能优化是一个复杂而庞大的工程,需要从多个方面入手,包括内存、线程和锁等。本书通过具体的案例分析和实践经验,向读者介绍了一些有效的性能优化方法,帮助读者提升程序的性能和响应速度。 总之,《高清JVM故障诊断与性能优化》是一本全面介绍JVM故障诊断和性能优化的书籍,对于深入了解JVM工作原理,解决JVM故障和优化JVM性能具有很大的帮助。无论是对于Java开发人员还是系统管理员来说,本书都是一本值得阅读的参考书目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值