jvm
jvm
我是陈旭原
生命不息 运动不止
展开
-
【java虚拟机】- 垃圾回收
文章目录1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法1.3 四种引用2. 垃圾回收算法2.1 标记清除2.2 标记整理2.3 复制3. 分代垃圾回收3.1 相关 VM 参数4. 垃圾回收器4.1 串行1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以回收哪些对象可以作为 GC Root ?1.原创 2020-05-27 17:56:48 · 134 阅读 · 0 评论 -
【java虚拟机】- 内存模型
文章目录1. java 内存模型1.1 原子性1.2 问题分析1.3 解决方法2. 可见性2.1 退不出的循环2.2 解决方法2.3 可见性3. 有序性3.1 诡异的结果3.2 解决方法3.3 有序性理解3.4 happens-before1. java 内存模型很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java Memory Model(JMM)的意思。关于它的权威解释,请参考 https://download.oracle.com/otn-pub原创 2020-05-26 17:31:43 · 136 阅读 · 0 评论 -
【java虚拟机】- 内存结构
文章目录1. 程序计数器1.1 定义1.2 作用2. 虚拟机栈2.1 定义2.2 栈内存溢出2.3 线程运行诊断3. 本地方法栈4. 堆4.1 定义4.2 堆内存溢出4.3 堆内存诊断5. 方法区5.1 定义5.2 组成5.3 方法区内存溢出5.4 运行时常量池5.5 StringTable5.5 StringTable 特性5.6 StringTable 位置5.7 StringTable 垃圾回收5.8 StringTable 性能调优6. 直接内存6.1 定义6.2 分配和回收原理1. 程序计数器原创 2020-05-26 14:27:57 · 142 阅读 · 0 评论 -
JVM(六)类加载器原理
我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了。那么字节码文件是怎样装载到JVM中的呢?中间经过了哪些步骤?常说的双亲委派模式又是怎么回事?本文主要搞清楚这些问题。类装载流程1、加载加载是类装载的第一步,首先通过class文件的路径读取到二进制流,并解析二进制流将里面的元...转载 2018-06-20 08:44:32 · 122 阅读 · 0 评论 -
JVM(一) 基本原理
运行流程 我们都知道Java一直宣称的口号是:一次编译,到处运行。那么它如何实现的呢?我们看下图: java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后转换为不同平台的机器码,最终得到执行。这样我们是不是可...转载 2018-06-09 09:18:28 · 307 阅读 · 1 评论 -
JVM(八)java堆分析
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等。这些工具都非常有用,但要用好他们需要不断的进行实践分析。本文将介绍使用MAT工具进行java堆分析的案例。内存溢出(OOM)的原因 我们常见的OOM(OutOfMemoryError)发...转载 2018-06-23 10:59:05 · 258 阅读 · 0 评论 -
JVM(五)垃圾回收器
上一篇我们介绍了常见的垃圾回收算法,不同的算法各有各的优缺点,在JVM中并不是单纯的使用某一种算法进行垃圾回收,而是将不同的垃圾回收算法包装在不同的垃圾回收器当中,用户可以根据自身的需求,使用不同的垃圾回收器,以便让自己的java程序性能到达最佳。在介绍垃圾回收器之前,我们先回顾一下java堆的结构。堆内存回顾 java堆内存结构包括:新生代和老年代,其中新生代由一个伊甸...转载 2018-06-15 09:10:55 · 105 阅读 · 0 评论 -
JVM(七)性能监控工具
前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程、方法。本文就将介绍利用性能监控工具,帮助开发者更快更准的找到问题产生的根源。本文分为三部分,第一部分将介绍在Linux环境下的常用监控工具,第二部分介绍Windows环境下的监控工具,第三部分将通过一个案例,介绍利用这些监控工具一步一步找出...转载 2018-06-22 13:41:04 · 238 阅读 · 0 评论 -
JVM(四)垃圾回收算法
我们都知道java语言和C语言最大的区别是内存自动回收,那么JVM是怎么控制垃圾回收的,这篇将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理。 stop the word 在介绍垃圾回收之前,我们需要先了解一个词“stop the world”,stop the world会在执行某一个垃圾回收算法的时候产生,JVM为了执行垃圾回收,会暂时java应用程序的执行,等垃圾回收...转载 2018-06-14 08:54:49 · 162 阅读 · 0 评论 -
JVM(三) 配置参数
JVM配置参数分为三类参数:1,跟踪参数2,堆分配参数3,栈分配参数这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存。跟踪参数跟踪参数用于跟踪监控JVM,往往被开发人员用于JVM调优以及故障排查。1,当发生GC时,打印GC简要信息使用-XX:+PrintGC或-verbose:gc参数这两个配置参数的效果是一样的,都是在发生GC的时候打印简要的信息,例如执行代码:public sta...转载 2018-06-13 08:31:22 · 150 阅读 · 0 评论 -
JVM(二)内存模型,可见性,指令重排序
发的转载 2018-06-11 19:48:46 · 123 阅读 · 0 评论