
JVM
zerone-f
这个作者很懒,什么都没留下…
展开
-
第0课:JVM前置知识
内容: 1.内存溢出类型 2.JVM内存区域组成 3.VM如何设置虚拟内存 4.性能检查工具使用 5.不健壮代码的特征及解决办法一、内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space a)JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建...转载 2018-10-28 08:38:24 · 358 阅读 · 0 评论 -
第21课:JVM中G1收集器解密
内容: 1.G1收集器的解析 2.G1收集器的使用一、G1收集器的解析 G1和其他收集器截然不同,从分代上看,它仍然属于分代垃圾收集器,也会区分新生代、老年代,仍然有Eden区和Survivor区;从堆结构上看,它并不要求新生代、老年代都连续。作为CMS的长期替代方案,G1使用了分区算法,其特点如下: a)并行性:在回收期间,可以由多个GC线程同时工...原创 2018-11-03 22:17:07 · 169 阅读 · 0 评论 -
第22课:通过案例瞬间理解JVM中PSYoungGen、ParOldGen、MetaSpace
内容: 理解JVM中PSYoungGen、ParOldGen、MetaSpace一、理解JVM中PSYoungGen、ParOldGen、MetaSpaceHeap PSYoungGen total 2560K, used 2505K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000) ede...原创 2018-11-04 09:46:06 · 7917 阅读 · 0 评论 -
第11课:jvm的gc日志young Generation下minor GC每个字段彻底详解
内容: 1.演示Minor GC 2.彻底分析Minor GC的每一个字段一、演示Minor GC[GC (Allocation Failure) [PSYoungGen: 2048K->496K(2560K)] 2048K->613K(9728K), 0.0490609 secs] [Times: user=0.00 sys=0.00, real=0.0...原创 2018-11-02 10:53:46 · 318 阅读 · 0 评论 -
第12课:jvm的gc日志full Gc每个字段彻底详解
内容: 1.演示Full GC 2.彻底解析FullGC的每一个字段一、演示Full GC[Full GC (Ergonomics) [PSYoungGen: 944K->890K(2048K)] [ParOldGen: 7129K->7129K(7168K)] 8074K->8019K(9216K), [Metaspace: 3357K->33...原创 2018-11-02 11:18:16 · 6927 阅读 · 2 评论 -
第13课:java 8中的jvm的metaspace解密
内容:1.从Permanent到MetaSpace2.MetaSpace内部解密一、从Permanent到MetaSpace 1.由于Permanent Generation内存经常不够用或发生内存泄露,引发恼人的java.lang.OutOfMemoryError: PermGen (在Java Web开发中非常常见)。 2.移除Permanent Generatio...原创 2018-11-02 13:13:30 · 299 阅读 · 0 评论 -
第23课:使用MAT对Dump文件进行分析实战
内容: 1.导出内存中的Dump文件 2.使用MAT对Dump文件进行分析实战一、导出内存中的Dump文件 1.下载Memory Analyzer (MAT) 2.解压到合适的目录下,我自己是放到了/home/hadoop/下3.在Eclipse IDE下编写一个程序package DT.JavaJVM;/** * Hello worl...原创 2018-11-04 14:53:15 · 586 阅读 · 0 评论 -
第24课:使用MAT动态分析Spark应用程序初体验
内容: 1.如何使用MAT直接分析运行的Spark程序 2.用MAT直接分析运行的Spark运行初步体验一、如何使用MAT直接分析运行的Spark程序 1.启动MAT 2.启动需要检测分析的程序import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRD...原创 2018-11-04 16:39:16 · 259 阅读 · 0 评论 -
第25课:基于MAT分析Shallow Heap和Retained Heap
内容:Shallow Heap和Retained Heap一、Shallow Heap和Retained Heap Shallow Heap:只包含自己堆内的元素对象,不包含引用的对象; Shallow Size:对象自身占用的内存大小,不包括它引用的对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储...原创 2018-11-04 19:18:58 · 503 阅读 · 0 评论 -
第14课:java对象内存逃逸技术
内容: 1.内存逃逸技术分析 2.内存逃逸技术实战一、内存逃逸技术分析 1.逃逸是指在某个方法之内创建的对象,除了在方法体之内被引用之外,还在方法体之外被其它变量引用到;这样带来的后果是在该方法执行完毕之后,该方法中创建的对象将无法被GC回收,由于其被其它变量引用。正常的方法调用中,方法体中创建的对象将在执行完毕之后,将回收其中创建的对象;故由于无法回收,即成为逃逸...原创 2018-11-02 21:20:33 · 348 阅读 · 0 评论 -
第15课:GC时候的引用计数算法和根搜索算法
内容: 1.GC时候的引用计数 2.GC的时候根搜索算法一、GC时候的引用计数 对象一旦被使用,计数器会进行+1操作,当对象取消引用计数器-1操作,当为0时被标示为垃圾。此种标示方法的弊端在于已经死亡的对象如果存在相互引用,则会一直占用内存空间,不被回收。此时会导致内存泄漏。为了解决这个问题出现了根搜索算法。二、GC的时候根搜索算法 1.Java采用该...原创 2018-11-02 22:27:28 · 497 阅读 · 0 评论 -
第16课:瞬间理解三种基本的GC算法基石
内容: 1.GC的标记、清除算法 2.GC的复制算法 3.GC的标记、整理算法一、GC的标记、清除算法 内存中的对象构成一棵树,当有效的内存被耗尽的时候,程序就会停止,此时做两件事: a)标记,标记从树根可达的对象(途中水红色) b)清除(清除不可达的对象) 标记清除的时候需要停止程序运行,如果不停止,此时如果存在...转载 2018-11-02 22:57:59 · 769 阅读 · 0 评论 -
第26课:MAT中的Dominator Tree与Retained Set详解
内容: 1.Dominator Tree与Retained Set 2.Dominator Tree详解一、Dominator Tree与Retained Set Retained set:是这个对象本身和他持有引用的对象和这些对象的retained set所占内存大小的总和; Dominator Tree(支配树)视图,在此视图中列出了...原创 2018-11-04 20:39:25 · 1715 阅读 · 0 评论 -
第27课:MAT中的GC Root解析和具体类别分析
内容: GC Root解析 GC Root具体类别分析一、GC Root解析 1.MAT查看GC RootJava Basics->GC Root二、GC Root具体类别分析Gc root:一个gc根就是一个对象,这个对象从堆外可以访问读取。以下一些方法可以使一个对象成为gc根。 1.System class:被bootstrap或者...原创 2018-11-04 20:57:26 · 3457 阅读 · 1 评论 -
第20课:JVM中CMS收集器解密
内容: 1.CMS收集器的解析 2.CMS收集器的使用一、CMS收集器的解析 1.CMS(Concurrent Mark Sweep) 并发收集,低停顿,适合响应时间敏感的应用使用。 2.CMS垃圾收集阶段: CMS-Initial mark(初始标记):标记GC Roots能够关联到的对象。stop-the-world,暂停从root对...原创 2018-11-03 20:33:42 · 182 阅读 · 0 评论 -
第19课:JVM中Serial收集器、ParNew收集器、Parallel收集器解析
内容: 1.Serial收集器 2.ParNew收集器 3.Parallel收集器一、三种收集器解析 Serial收集器:单线程的方式,串行的方式,一般在新生代来收集垃圾。Serial Old收集器采用标记/压缩的算法一般用来收集老年代。没有多线程在线程切换带来的性能消耗。 ParNew收集器:多线程的,采用复制算法和Stop the World的方...原创 2018-11-03 19:24:16 · 823 阅读 · 0 评论 -
第18课:JVM垃圾回收器串行、并行、并发垃圾回收器概述
内容:1.JVM中不同的垃圾回收器2.穿行、并行、并发垃圾回收器概述一、JVM中不同的垃圾回收器 1.按照分代收集的方式,把垃圾回收器做如下的划分: a)新生代收集器:Serial 、ParNew、Parallel Scavenge b)老年代收集器:CMS、Serial Old、Paralled Old c)新生代和老年代都可以...原创 2018-11-03 11:13:23 · 1417 阅读 · 0 评论 -
第1课:实战演示jvm内存四大类型问题:heap、stack、contant、directmemory等
JVM前置知识零、参数设置: 设置VM options: -verbose:gc -Xms10M -Xmx10M -XX:MaxDirectMemorySize=5M -Xss228K -XX:+PrintGCDetails JVM启动参数共分为三类: 1、标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容。例如:-verbose:class...原创 2018-10-28 10:08:12 · 829 阅读 · 2 评论 -
第2课:详细图解jvm内存三大核心区域及其jvm内存案例实战剖析
内容: 1.图解JVM内存的三大核心区 2.JVM内存使用案例剖析一、图解JVM内存的三大核心区二、VM内存使用案例剖析从JVM调用的角度分析Java程序对内存空间的使用: 1.当JVM进程启动的时候,会从类加载路径中找到包含main 法的入口类JVM; 2.找到JVM后会直接读取该文件中的二进制数据并且把该类的信息放到运行的Method内存区...原创 2018-10-28 11:52:12 · 367 阅读 · 0 评论 -
第3课:图解JVM线程引擎和内存共享区的交互以及此背景下的程序计算器内幕解密
内容: 1.JVM线程引擎和内存共享区交互 2.计数器内幕一、图解 1.多线程Java运用程序:为了让每个线程正常工作就提出了程序计数器(Program Counter Register),每个线程都有自己的程序计数器,这样当线程执行切换的时候就可以早上一次执行的基础上继续执行,仅仅从一条线程执行的角度而言,代码是一条一条的往下执行的,这个时候就是Program C...原创 2018-10-29 08:59:40 · 193 阅读 · 0 评论 -
JVM架构和GC垃圾回收机制详解
转载地址:JVM架构和GC垃圾回收机制详解 JVM被分为三个主要的子系统:1. 类加载器子系统2. 运行时数据区3. 执行引擎1. 类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链接并初始化该类文件。1.1 加载类由此组件加载。启动类加载器 (BootStrap class Loade...转载 2018-10-31 08:15:15 · 293 阅读 · 0 评论 -
第6课:实战演示从oom推导出jvm Gc时候基于的内存结构:young Generation(eden、from、to)、old Generation、permanent Generation
内容: 1.实战演示Windows和Linux下的OOM 2.GC时候基于的内存结构一、演示及分析1.不同的平台JVM实现有所差别: a)在Windows下栈的最小值为108k b)在Linux下栈的最小值为228k2.通过以下异常信息,可以推导jvm的内存结构。[Full GC (Ergonomics) [PSYoungGen: 944K-&g...原创 2018-10-31 08:25:58 · 439 阅读 · 0 评论 -
第7课:瞬间理解jvm Gc时的内存管理工作流程和频繁gc的原因
内容: 1.JVM GC时候的内存管理 2.频繁GC原因初步分析 3.补充一、JVM GC时候的内存管理1.从对象角度来看在JVM进行GC时,内存中存在新生代(年轻代)、老年代(年老代)、永久代。在我们运行程序时,会创建很多对象。 a)从生命周期上看:根据经验,绝大多数对象在使用过之后就不会在使用了。也就是说这些对象的使用的生命周期比较短。当然相应的,...原创 2018-10-31 09:53:37 · 486 阅读 · 0 评论 -
第5课:实战演示jvm三大性能调优参数:-xms -xmx -xss
内容:1.实战演示-Xss性能调优参数2.实战演示-Xms、-Xmx性能调优参数一、实战演示-Xss性能调优参数 Java每个线程的Stack大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000...原创 2018-10-29 17:37:50 · 846 阅读 · 0 评论 -
第8课: JVM的young Generation大小对gc性能的致命影响力内幕解密
内容: 1.JVM Young Generation工作机制详解 2.Young Generation对GC的性能的影响一、VM Young Generation工作机制详解 1.年轻代和年老代实现算法不同,年轻代GC是有空间的,释放已经占用的空间,年老代GC是没有空间了,是迫不得已,大部分的JVM对象生命周期都不是很长。 2.整个Heap分为年轻代和年...原创 2018-10-31 11:49:20 · 2177 阅读 · 0 评论 -
第9课:jvm的gc时候核心参数详解:-XX:NewRatio、-XX:SurvivorRatio、-XX:NewSize、-XX:MaxNewSize
内容: 1.-XX:NewRatio 2.-XX:SurvivorRatio 3.-XX:NewSize和-XX:MaxNewSize一、JVM内存结构图二、参数详解 1.-xx:NewRatio:年轻代和老年代相对的比值大小大小,如果设置-XX:NewRatio=4,指标是Young Generation:Old Generation = 1:4,即年...原创 2018-10-31 17:19:07 · 7822 阅读 · 0 评论 -
第10课:jvm的gc中关于对象的age问题以及jvm的内存分配策略彻底详解
内容: 1.对象的Age的问题 2.JVM的内存分配策略一、JVM内存结构图二、对象的Age的问题以及内存分配策略详细文章:JVM的内存分配策略 1.Eden中比较频繁的GC,每次GC都会导致内存分布的变化。对象的计数器:对象的Age是标记的关键。年轻代的GC又叫minor GC。对象GC年龄阈值默认是15。每次GC后还存活就将对象Age加1。 2....原创 2018-10-31 20:49:04 · 446 阅读 · 0 评论 -
JVM的内存分配策略
转载地址:JVM总结(二):JVM的内存分配策略目录内存分配策略 对象优先在新生代Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保一、内存分配策略 1.Java技术体系中所提倡的自动内存管理可以归结于两个部分:给对象分配内存以及回收分配给对象的内存。 2.我们都知道,Java对象分配,都是在Java堆上进行分配...转载 2018-10-31 21:01:44 · 196 阅读 · 0 评论 -
第17课:JVM垃圾回收分代收集算法
内容: 1.分代GC在新生代的算法 2.分代GC在年老代的算法一、分代GC在新生代的算法 JVM对内存Heap的不同区域采用不同的算法。主要是新生代和年老代,新生代比较适合复制算法,新生代有Eden/From/To,采用复制算法,速度非常快。Eden中存活的对象会被复制到To区域。二、分代GC在年老代的算法 老年代的对象的生命周期比较长,不适合复制算法...原创 2018-11-03 09:50:43 · 373 阅读 · 0 评论 -
第28课:MAT中的内存泄露检测介绍
内存: 1.内存泄露的巨大风险 2.MAT中的内存泄露一、内存泄露的巨大风险 Memory Leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。二、MAT中的内存泄露选择:Leak Suspects ...原创 2018-11-04 21:11:19 · 530 阅读 · 0 评论