三色标记算法原理 什么是三色标记算法jvm垃圾回收期使用的,在并行标记的时候的一种算法,CMS/G1中的核心算法。把对象从逻辑上分为三种颜色,分别是黑色,灰色,白色黑色:自身和成员变量均已标记灰色:自身被标记,成员变量未被标记白色:未被标记的对象它主要用于收集器内存管理,适用于任何的垃圾收集器,也就是通用的算法。我们通过G1回收器来了解这个算法,我们都知道G1收集器分为三个步骤新生代回收过程当新生代eden区内存满 最新文章123 凯哥Java JVM学习系列 2021-08-20 3138已阅读 0 JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解 现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(LockContention)Java进程消耗CPU过高......这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性 最新文章123 凯哥Java JVM学习系列 2021-08-11 3068已阅读 0 JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的 JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的又名:Java虚拟机的内存模型(JMM)是什么样的.通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器。我们可以得到如下两幅图:类生命周期:父类委托机制:思考:我们编写的类中的变量、方法、对象这些都需要内存存放的。那么在运行时候这些数据在Java虚拟机内存中是怎么存放的呢?本文目标:凯哥(凯哥Java:kaigejav 最新文章123 凯哥Java JVM学习系列 2021-07-02 3158已阅读 0 深入理解JVM类加载机制 简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 最新文章123 凯哥Java JVM学习系列 2021-06-24 3112已阅读 0 JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题)。我们也知道我们Java程序员编写的程序代码文件是*.java的,而JRE运行的是*.class的文件。所以,我们需要将java文件编译成class文件然后才可以。那么,你有没有想过,一个java文件是怎么运行起来的呢?中间都经历 最新文章123 凯哥Java JVM学习系列 2021-06-24 3077已阅读 0 常见JVM面试题及答案整理 前言总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。1.什么情况下会发生栈内存溢出。思路:描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。我的答案:栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出 最新文章123 凯哥Java JVM学习系列 2021-06-22 3562已阅读 0 深入点理解JVM-JVM内存模型 们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子。 最新文章123 凯哥Java JVM学习系列 2021-06-01 3325已阅读 0 JVM笔记九-GC收集器日志信息学习 在上一篇文章中,我们通过代码运行结果,查看到JVM的堆内存逻辑上分区是三部分,物理上分区是2部分,以及是新生代分区三部分,占比分布是8/1/1。而且我们还通过代码和堆JVM参数配置,制造出了OOM异常。下面我们就来分析GC回收器的日志信息。先来看看,OOM后,GC详细日志信息:新生区的伊甸园区GC日志分析新生区的Eden区的GC,叫法:GC或者是YGC或者是MinorGC或者是轻GC我们复制一条来 最新文章123 凯哥Java JVM学习系列 2020-11-21 3346已阅读 0 JVM笔记八-堆参数调优 JVM垃圾收集器(JavaGarbageCollection)。本教程均在JDK1.8+HotSpot为例来讲解的.先来看看Java7的:再来看看Jva8的可以看出,java8之后换成了元空间。那么怎么证明,堆区是有新生代、永久代、元空间三部分组成的呢?OOM这个错误我们都熟悉,那么怎么手动制造出一个OOM呢?如果16G的物理内存,JVM堆内存能够分到多少G的内存空间呢?我们带着这些疑问来一起学习 最新文章123 凯哥Java JVM学习系列 2020-11-15 3312已阅读 0 JVM笔记六-堆区知识之对象生命周期和GC的关系 通过上一篇文章的学习,我们对JVM堆区有了初步的认识,接下来,我们继续展开讲解堆区。对象生命周期和GC的关系。我们已经知道了,堆区的新生区分成了三个部分:伊甸园区、幸存者0区、幸存者1区。其中0区也叫from,1区也叫to区。但是这个from和to是固定不变的吗?NO,NO,NO不是的。当新生区执行一次GC(YGC)后,from和to区会进行交换。交换后,也就是在GC之后,谁空谁是to区。所以,f 最新文章123 凯哥Java JVM学习系列 2020-10-24 3156已阅读 0