JVM合集
文章平均质量分 94
阿Q说代码
阿Q:CSDN博客专家、Java后端领域优质创作者、InfoQ签约作者、掘金优质创作者,现任一家世界五百强企业技术 Leader。
作为深软件开发工程师的阿Q,专注于后端技术栈分享,包括但不局限于:JVM、数据库、中间件、微服务、Spring全家桶。
展开
-
面试官:说下你对方法区演变过程和内部结构的理解
之前我们已经了解过“运行时数据区”的程序计数器、虚拟机栈、本地方法栈和堆空间,今天我们就来了解一下最后一个模块——方法区。简介创建对象时内存分配简图《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”虽然 Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。所以,方法区可以看作是一块独立于 Java 堆的内存空间。方法区与 J原创 2021-09-26 16:23:22 · 256 阅读 · 0 评论 -
Battle:你会TLAB,我会逃逸分析
“噔噔噔…”传来一阵敲门声,把我从美梦中惊醒了。朦胧间听到有人在说话“阿Q,在家不?”“来了来了”,推门一看,原来是“赵信”兄弟。赵信:自称常山赵子龙,一把三爪长枪耍的虎虎生风,见人上去就是一枪,人送外号“菊花信”。TLAB尽管不是所有的对象实例都能够在TLAB中成功分配内存(因为它的空间比较小),但JVM明确是将TLAB作为内存分配的首选;一旦对象在TLAB空间分配内存失败时,JVM就会尝试着通过使用加锁机制确保数据操作的原子性,从而直接在Eden空间中分配内存原创 2021-06-22 22:20:52 · 358 阅读 · 6 评论 -
醒酒菜:动画图解核心内存区--堆
端午佳节一下子就过完了,大家是不是还沉迷在假期的欢乐气氛中无法自拔?今天阿Q为大家准备了上好的“醒酒菜”——JVM运行时数据区的核心内存区——堆。堆的概述一般来说:一个Java程序的运行对应一个进程;一个进程对应着一个JVM实例(JVM的启动由引导类加载器加载启动),同时也对应着多个线程;一个JVM实例拥有一个运行时数据区(Runtime类,为饿汉式单例类);一个运行时数据区中的堆和方法区是多线程共享的,而本地方法栈、虚拟机栈、程序计数器是线程私有的。堆空间差不多是最大的内存空间,也是运行原创 2021-06-15 12:19:12 · 1428 阅读 · 4 评论 -
面试篇:虚拟机栈5连问,一听心里就乐了
面试路上“滴,滴滴…”师傅我们到哪了?我还要赶着面试呢。师傅: 快了快了,下个路口就到了。真是服了这帮人了,不会开车净往里凑。听着司机师傅的抱怨声,不禁想起首打油诗:满目尾灯红,耳盈刺笛声。心忧迟到久,颓首似雷轰。一下车赶紧小跑就进了富丽堂皇的酒店,不不不,是商务楼,这大厅有点气派,让我有点想入非非呀。面试经过“咚咚咚”,“请进”。面试官: 小伙子长得挺帅呀,年轻人就是有活力,来先做个简单的自我介绍吧。阿Q: 面试官你好,My name is “影流之主”,来自艾欧尼亚,是LOL中的最强中原创 2021-05-17 09:01:50 · 229 阅读 · 2 评论 -
方法调用:一看就懂,一问就懵?
方法调用是不是很熟悉?那你真的了解它吗?今天就让我们来盘一下它。首先大家要明确一个概念,此处的方法调用并不是方法中的代码被执行,而是要确定被调用方法的版本,即最终会调用哪一个方法。上篇文章中我们了解到,class字节码文件中的方法的调用都只是符号引用,而不是直接引用(方法在实际运行时内存布局中的入口地址),要实现两者的转化,就不得不提到解析和分派了。解析我们之前说过在类加载的解析阶段,会将一部分的符号引用转化为直接引用,该解析成立的前提是:方法在程序真正运行之前就已经有一个可确定的调用版本,并且这原创 2021-05-14 09:18:02 · 225 阅读 · 4 评论 -
20张图带你了解JVM运行时数据区(上)
我们的JVM系列已经断更好几天了,小伙伴们在后台疯狂私信阿Q,想看后续内容,今天它来了。相信大家在上篇文章中已经对类加载子系统有了清晰的认识,接下来就让我们来揭开“运行时数据区”的神秘面纱吧。运行时数据区总览内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。下图就是HotSpot的经典的内存布局:图中的Co原创 2021-05-07 09:40:07 · 372 阅读 · 0 评论 -
JVM集合之类加载子系统
上篇文章中我们知道了JVM是个啥?这篇文章(通篇文章都是以HotSpot JVM为例)就让我们来了解一下类加载子系统(ClassLoader)–负责从文件系统或者网络中加载Class字节码文件,并将加载的类信息(DNA元数据模版,jvm会根据这个模版实例化出n个一模一样的实例)存放于“方法区”(接下来的文章中会做具体的介绍)中。ClassLoader只负责文件的加载,而文件是否可以运行,则由执行引擎(Exection Engine,接下来的文章中会做具体的介绍)决定。下图是类加载子系统构造图:一、类的原创 2021-04-07 15:24:14 · 221 阅读 · 0 评论