深入理解JVM
主要讲解JVM内存结构和垃圾回收机制算法分析、动态字节码技术、类加载器、性能监控工具等。
杨林伟
像火箭科学家一样思考!
展开
-
深入理解JVM系列教程(完) - 终章总结
《深入理解JVM系列教程》至此正式讲解完毕,本文来总结一下之前的教程知识点内容,课程系列内容如下:深入理解JVM系列教程(01) - HotSpot VM深入理解JVM系列教程(02) - Java内存结构深入理解JVM系列教程(03) - 垃圾回收机制(一)深入理解JVM系列教程(04) - 垃圾回收机制(二) - 垃圾回收算法深入理解JVM系列教程(05) - JVM参数配置深入...原创 2019-10-31 14:55:53 · 998 阅读 · 2 评论 -
深入理解JVM系列教程(12) - 热部署
对于Java应用程序来说,热部署就是在运行时更新Java类文件。1. 热部署原理想要知道热部署的原理,必须要了解java类的加载过程,一个java类文件到虚拟机里的对象,要经过如下过程:首先通过java编译器,将java文件编译成class字节码类加载器读取class字节码,再将类转化为实例,对实例newInstance就可以生成对象。类加载器ClassLoader功能,也就是将cl...原创 2019-10-31 14:40:38 · 777 阅读 · 0 评论 -
深入理解JVM系列教程(11) - 类加载器
1. 类加载机制的层次结构类加载过程如下:每个编写的”``.java`”拓展名类文件都存储着需要执行的程序逻辑这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对应的class对象将class文件加载到虚拟机的内存这里我们需要了解...原创 2019-10-31 11:44:08 · 549 阅读 · 0 评论 -
深入理解JVM系列教程(10) - 字节码技术
1. 应用场景AOP技术、Lombok去除重复代码插件、动态修改class文件等。2. 字节码优势Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。Java字节码增强主要是为了减少冗余代码,提高性能等。实现字节码增强的主要步骤为:修改字节码 : 在内存中获取到原来的字节码,然后通过一些工具(如 ASM,Javaas...原创 2019-10-31 09:59:51 · 626 阅读 · 0 评论 -
深入理解JVM系列教程(09) - JDK可视化工具
jconsole从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。如果是从命令行启动,使 JDK 在 PATH 上,运行 jconsole 即可。如果从 GU...原创 2019-10-30 18:05:29 · 515 阅读 · 0 评论 -
深入理解JVM系列教程(08) - Tomcat调优配置
1. Jmeter压力测试工具JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——使用Badboy录制生成 JMeter 脚本。简单的介绍一下Badboy,Badboy是一款不错的Web自动化测试工具,如果你将它...原创 2019-10-30 17:51:22 · 553 阅读 · 0 评论 -
深入理解JVM系列教程(07) - 垃圾收集器
1. 串行和并行收集器串行回收 : JDK1.5前的默认算法 缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长并行回收 : 多个线程执行垃圾回收适合于吞吐量的系统,回收时系统会停止运行2. serial收集器串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。在新生代、老年代使用串行回收、新生代复制算法、老年代标记-压缩、垃圾收集的过程中会S...原创 2019-10-30 17:11:42 · 564 阅读 · 0 评论 -
深入理解JVM系列教程(06) - 内存溢出与泄漏
1. Java堆溢出 java.lang.OutOfMemoryError: Java heap space 堆内存溢出案例:先去设置应用的堆内存大小,参考:《深入理解JVM系列教程(05) - JVM参数配置》import java.util.ArrayList;import java.util.List;public class OutOfMemoryErrorDemo { ...原创 2019-10-30 16:30:22 · 596 阅读 · 0 评论 -
深入理解JVM系列教程(05) - JVM参数配置
JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各个参数的功能与使用。1. 常见参数配置-XX:+PrintGC 每次触发GC的时候打印相关日志-XX:+UseSerialGC 串行回收-XX:+PrintGCDetails 更详细的GC日志-Xms 堆...原创 2019-10-30 16:07:54 · 630 阅读 · 1 评论 -
深入理解JVM系列教程(04) - 垃圾回收机制(二) - 垃圾回收算法
1. 标志清除算法标志清除算法有两个阶段:标记阶段:找到所有可访问的对象,做个标记清除阶段:遍历堆,把未被标记的对象回收应用场景:该算法一般应用于老年代,因为老年代的对象生命周期比较长优缺点:优点: 是可以解决循环引用的问题必要时才回收(内存不足时)缺点: 回收时,应用需要挂起,也就是stop the world。标记和清除的效率不高,尤其是要扫描的对象比较...原创 2019-10-30 15:22:53 · 723 阅读 · 0 评论 -
深入理解JVM系列教程(03) - 垃圾回收机制(一)
1. 什么是垃圾回收机制垃圾回收机制是指不定时去堆内存中清理不可达对象,这些对象并不会马上就会直接回收。 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使开发者能明确地判断出有一块内存已经无用了,是应该回收的,开发者也不能强制垃圾收集器回收该内存块。开发者唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的,这也是...原创 2019-10-30 14:33:18 · 638 阅读 · 0 评论 -
深入理解JVM系列教程(02) - Java内存结构
Java的内存结构如下图所示:下面来详细的讲解一下图上的内容:1. Java堆(Java Heap)java堆 :是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。java堆 :是垃圾收集器管理的主要区域,因此也被成为“GC堆”(G...原创 2019-10-30 12:41:44 · 769 阅读 · 0 评论 -
深入理解JVM系列教程(01) - HotSpot VM
提起 HotSpot VM(热点虚拟机),相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongta...原创 2019-10-30 10:13:47 · 840 阅读 · 0 评论