摘要: G1(Garbage-First)回收器是在JDK1.7中正式使用的全新垃圾回收器,G1拥有独特的垃圾回收策略,从分代上看,G1依然属于分代垃圾回收器,它会区分年代和老年代,依然有eden和survivor区,但从堆的结构上看,它并不要求整个eden区、年清代或者老年代都连续。它使用了全新的分区算法 阅读全文
posted @ 2018-09-28 10:19 翰林小院 阅读(383) 评论(0) 推荐(0) 编辑
摘要: CMS(Concurrent Mark Sweep)回收器 它使用的是标记清除算法,同时又是一个使用多线程并行回收的垃圾回收器。 CMS工作时主要步骤有初始标记、并发标记、预清理、重新标记、并发清除和并发重置。其中初始标记和重新标记是独占系统资源的,而预清理、并发标记、并发清除和并发重置是可以和用户 阅读全文
posted @ 2018-09-28 10:15 翰林小院 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 并行回收器 ParNew只是简单地将串行回收器多线程化,他的回收策略,算法以及参数都喝新生代串行回收器一样。由于并行回收器使用多线程进行垃圾回收,因此,在并发能力强的CPU上,它产生的停顿时间要短语串行回收器。 开启ParNew可以使用以下参数。 -XX:+UseParNewGC 新生代使用ParN 阅读全文
posted @ 2018-09-28 10:14 翰林小院 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 串行回收器 串行回收器只有一个工作线程,串行回收器可以在新生代和老年代使用,根据作用于不同的堆和空间,分为新生代串行回收器和老年代串行回收器。 串行收集器是所有垃圾回收器中最古老的一种,也是JDK中最基本的垃圾回收器之一。串行回收器主要有两个特点: 使用单线程进行垃圾回收 独占式垃圾回收 使用单线程 阅读全文
posted @ 2018-08-16 14:38 翰林小院 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 引用计数器法(Reference Counting) 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器减1。只要对象A的引用计数器的值为0,则对象A不可能再被使用。 存在的问题: l 无法处理循环引用,当对象A持有对象B的引用并且对 阅读全文
posted @ 2018-08-16 14:32 翰林小院 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 非堆内存相关配置 永久区初始大小 永久区最大大小 在JDK1.8中使用-XX:MxMetaspaceSize配置永久区最大大小 线程栈大小 直接内存大小,默认为最大堆空间,即-Xmx。当直接内存使用量达到-XX:MaxDirectMemorySize时,会触发垃圾回收,如果垃圾回收不能有效释放空间, 阅读全文
posted @ 2018-08-16 14:28 翰林小院 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 堆相关配置 最大堆空间 初始堆空间大小,如果初始堆空间耗尽,JVM会对堆空间扩容,其扩展上限为最大堆空间。通常-Xms与-Xmx设置为同样大小,避免扩容造成性能损耗。 设置新生代大小,设置一个较大的新生代会减少老年代的大小,新生代的大小一般设置为整个堆空间的1/3 或者1/4。 设置新生代中eden 阅读全文
posted @ 2018-08-16 14:27 翰林小院 阅读(1150) 评论(0) 推荐(0) 编辑
摘要: 1. JVM相关参数设置 JVM相关配置 两次次YoungGC,两次FullGC。 打印GC时的内存,并且在程序结束时打印堆内存使用情况 每次GC时会分别打印回收前与回收后堆信息 选择打印GC的方式后,再添加此参数。比如:-XX:+PrintGC -XX:+PrintGCTimeStamps 每次G 阅读全文
posted @ 2018-08-16 14:25 翰林小院 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 1. JVM的基本结构 1.1. 类加载子系统 类加载子系统负责从文件或者网络中加载Class信息,加载的类信息存放于方法区的内存空间。方法区中可能还会存放运行时常量信息,包括字符串与数字常量。(这部分常量信息是Class文件中常量池部分的内存映射)。 1.2. JAVA堆 JAVA的堆在JVM启动 阅读全文
posted @ 2018-08-16 11:28 翰林小院 阅读(349) 评论(0) 推荐(1) 编辑