JVM
文章平均质量分 93
老周聊架构
微信公众号:老周聊架构
展开
-
阿里二面:JVM 的三色标记算法你了解吗?
欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言不得不说阿里的面试还是挺有质量的,这个问题直接问到了 JVM 的底层算法实现。在说 JVM 的三色标记算法之前,我们先来说下 JVM 对于常见对象存活判定算法与垃圾收集算法。常见对象存活判定算法有引用计数算法和可达性分析算法。 引用计数法会产生循环引用问题,JVM 默认是通过可达性分析算法来判断对象是否存活的。而那些垃圾收集算法:标记-清除、标记-复制、标记-.原创 2021-06-30 00:03:59 · 1397 阅读 · 18 评论 -
2w 字长文爆肝 JVM 经典面试题!太顶了!
如果你是中高级程序员,那我相信你一定被面试官问过JVM。下次再被问到JVM,你直接把老周的这篇文章丢给他吧!话不多说,让我们直接进入主题吧。JVM内存结构,常见异常,调优参数,调优工具和命令JVM的理解JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。Minor GC ,Full GC 触发条件如何确定某个对象是“垃圾”?典型的垃圾收集算法常用的垃圾回收器有哪些, 特点是什么当出现了内存溢出,你怎么排错你们线上应用的JVM参数有哪些什么是内存泄原创 2021-04-12 22:06:32 · 3269 阅读 · 42 评论 -
深入理解Java虚拟机:(十六) Java虚拟机的性能监控及诊断工具
一、概述像我们在定位系统问题的时候,我们经常会使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度。我们下面来介绍 Sun JDK 监控和故障处理工具。名称主要作用jpsJVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程jstatJVM Statistics Monitoring Tool,用于搜集...原创 2020-02-03 20:25:54 · 498 阅读 · 0 评论 -
深入理解Java虚拟机:(十五)自定义注解处理器
一、什么是注解?讲注解处理器之前我们先来了解下注解的相关知识。注解(annotation)是 Java 5 引入的,用来为类、方法、字段、参数等 Java 结构提供额外信息的机制。我先举个例子,比如,Java 核心类库中的 @Override 注解是被用来声明某个实例方法重写了父类的同名同参数类型的方法。@Target(ElementType.METHOD)@Retention(Reten...原创 2020-02-02 22:34:59 · 505 阅读 · 0 评论 -
深入理解Java虚拟机:(十四)逃逸分析
一、概念逃逸分析(Escape Analysis)是目前 Java 虚拟机中比较前沿的优化技术。逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法引用,例如作为调用参数传递到其他方法中,称为方法逃逸。甚至还有可能被外部线程访问到,比如赋值给类变量或可以在其它线程中访问的实例变量,称为线程逃逸。在 Java 虚拟机的即时编译语境下,逃逸分析将判断新建的对象是...原创 2020-01-31 21:07:10 · 788 阅读 · 0 评论 -
深入理解Java虚拟机:(十三)方法内联
一、概念前面几篇中,多次提到方法内联的技术。它指的是:在编译过程中遇到方法调用时,将目标方法的方法体纳入编译范围之中,并取代原方法调用的优化手段,减少因方法调用开销的技术。函数调用过程首先会有个执行栈,存储它们的局部变量、方法名、动态连接;当一个方法被调用,一个新的栈帧会被加到栈顶,分配的本地变量和参数会存储在这个栈帧;跳转到目标方法代码执行;方法返回的时候,本地方法和参数被销毁,栈...原创 2020-01-30 17:19:46 · 1107 阅读 · 0 评论 -
深入理解Java虚拟机:(十二)JVM内的即时编译器
一、概述在部分的商用虚拟机中(Sun HotSpot、IBM J9)中,Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为 “热点代码” (Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编...原创 2020-01-29 17:01:15 · 1202 阅读 · 0 评论 -
深入理解Java虚拟机:(十一)Java语法糖详解
一、概述1、语法糖语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。我们所熟知的编程语言中几乎都有语法糖。笔者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。很多人说Java是一个“低糖语言”,其实从Java 7开...原创 2020-01-28 17:47:31 · 528 阅读 · 0 评论 -
深入理解Java虚拟机:(十)JVM是如何实现锁优化的?
一、线程安全在如今多核操作系统盛行的环境下,我们如何将我们的程序在计算机中正确且高效的运行?对于多核中出现高效并发的问题,我们如何保证并发的正确性和如何实现线程安全说起。这里引用下《Java Concurrency In Practice》的作者 Brian Goetz 对 “线程安全” 有一个比较恰当的定义:“当多个线程访问同一个对象时,如果不用考虑线程在运行时环境下的调度和交替执行,也不需...原创 2020-01-27 22:02:29 · 584 阅读 · 0 评论 -
深入理解Java虚拟机:(九)Java内存模型
一、为什么要有内存模型?在正式讲解 Java 内存模型之前,我们先来了解一下到底什么是计算机内存模型,然后再来看 Java 内存模型在计算机内存模型的基础上都做了哪些事情。内存模型:英文名 Memory Model,它是计算机领域很古老的一个概念,而且是计算机硬件有关的一个概念。那么,它和硬件到底有啥关系呢?我们先来了解一下。1、物理硬件与内存在单核操作系统中,处理问题要简单的多,对内存和...原创 2020-01-26 16:17:48 · 391 阅读 · 0 评论 -
深入理解Java虚拟机:(八)垃圾收集器
一、对象已死吗?在堆里面有着几乎所有的对象实例,垃圾收集器在进行回收之前,首先确定这些对象之中哪些还“存活”,哪些已“死去”(即不可能再被任何途径使用的对象)。1、引用计数法引用计数法(reference counting)。它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为 0,则说明该对象已经死亡,便可以被回收了。如果有一个引用,被赋值为某...原创 2020-01-22 22:34:58 · 485 阅读 · 0 评论 -
深入理解Java虚拟机:(七)Java对象的内存布局
一、运行数据区域想要了解 JVM 在执行 Java 程序的过程中会把内存划分成不同的数据区域,每个区域都有不同的作用以及创建时间、销毁时间。下面是运行时数据区的结构图,我们接下来就一一来详细分析各个区域起的作用。1、程序计数器线程内存独享,占用内存小,生命周期与线程相同(随线程诞生而诞生,随线程消亡而消亡)。记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。2...原创 2020-01-20 23:20:18 · 519 阅读 · 0 评论 -
深入理解Java虚拟机:(六)JVM是如何实现反射的?
一、前言反射应该是 Java 基础最重要的特性之一吧。反射在 Java 应用中无处不在,像 Web 开发中,我们经常接触到各种可配置的框架,为了保证框架的可扩展性,往往会借助 Java 的反射机制,根据配置文件来加载不同的类。比如说,Spring 框架的最重要特性之一依赖反转(IoC),就是用的反射机制来实现的。我们这一篇就来了解一下反射的实现机制以及它性能糟糕的原因。二、反射调用的实现首先...原创 2020-01-19 00:05:51 · 1749 阅读 · 0 评论 -
深入理解Java虚拟机:(五)JVM是如何处理异常的?
一、异常的基本概念在讲 JVM 是如何处理异常之前,我们先来复习一下异常的分类。这张图是我们刚开始学习 Java 异常再熟悉不过的一张图了吧。在这里还是要唠叨一下,在 Java 语言规范中,所有异常都是 Throwable 类或者其子类的实例。Throwable 有两大直接子类。第一个是 Error,涵盖程序不应捕获的异常。当程序触发 Error 时,它的执行状态已经无法恢复,需要中止线程甚至是...原创 2020-01-14 22:47:53 · 784 阅读 · 0 评论 -
深入理解Java虚拟机:(四)JVM是如何执行方法调用的?(下)
一、前言上一篇我们主要讲了解析和分派。解析可以认为是调用目标在程序代码写好、编译器进行编译时就必须确认下来。只要能被 invokestatic 和 invokespecial 指令调用的方法,都可以在解析阶段确定唯一的调用版本,符合这个条件的静态方法、私有方法、实例构造器、父类方法4类,它们在类加载的时候就会把符号引用解析为该方法的直接引用。这些方法可以称为非虚方法。而分派的调用分为重载和重写,...原创 2020-01-12 14:56:47 · 630 阅读 · 0 评论 -
深入理解Java虚拟机:(三)JVM是如何执行方法调用的?(上)
一、前言上一篇我们主要介绍了类加载的机制,这一篇我们主要来介绍下Java虚拟机是如何执行方法调用的?我们前面讲过,Class 文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在 Class 文件里面存储的都只是符号引用,而不是方法在实际运行中的入口地址(相当于之前说的直接引用)。这个特性给 Java 带来了强大的动态扩展能力,但也使得 Java 方法调用过程变得相对复杂起来,需要在类加载...原创 2020-01-10 23:08:28 · 810 阅读 · 0 评论 -
深入理解Java虚拟机:(二)Java虚拟机的类加载机制
一、概述在上一篇我么了解到 Java 源文件经过编译后成 Class 文件,在 Class 文件中描述的各种信息,最终都需要加载到虚拟机中才能运行与使用。而虚拟机如何加载这些 Class 文件的?Class 文件进入到虚拟机中间又发生了什么?这就是本篇要讲的内容。虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行验证、准备、解析和初始化,最终形成可以被虚拟机这届使用的 Java ...原创 2020-01-06 01:35:11 · 603 阅读 · 6 评论 -
深入理解Java虚拟机:(一)Java代码是如何运行的?
一、前言我刚接触Java的时候,我和我同学就Java的运行环境要下载JRE还是JDK争议了好久,我认为 JRE 是 Java Runtime Environment,翻译过来就是Java运行环境,所以我当时认为Java代码要运行当然要安装JRE。而我同学强硬说要安装JDK,至于原因他也说不上来,反正写代码就要先下载个JDK,最后的聊天以他对我说的一句话结束,我到现在还清晰的记得:不要以为你英语好...原创 2020-01-04 23:32:39 · 1934 阅读 · 0 评论 -
JVisualVM 的使用教程
一、简介Java VisualVM 是一个直观的图形用户界面,基于Java 的应用程序,在给定的 Java 虚拟机(JVM)上运行时提供有关它们的详细信息。Java VisualVM 之所以这样命名,是因为Java VisualVM 可视地提供了有关JVM软件的信息。Java VisualVM 将多个监视、故障排除和性能分析实用程序组合到一个工具中。 例如,独立工具 jmap,jinfo,js...原创 2019-10-21 23:54:10 · 5321 阅读 · 0 评论 -
final的两个重排序规则
对于final 域,编译器和处理器要遵守两个重排序规则:1、在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2、初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。先看一段示例代码:package com.test;/** * final域为基本类型 * * @...原创 2019-07-18 00:50:16 · 4014 阅读 · 4 评论