深入理解Java虚拟机
文章平均质量分 74
每天进步亿点点,跟小编一起学习Java虚拟机呀
bearx...
攻城狮
展开
-
【JVM】类文件结构-访问标识
目录常见的访问标识多访问标识组合非共存访问标识共存访问标识文章福利历史好文【JVM】内存布局-虚拟机栈-局部变量表(二)【JVM】内存布局-虚拟机栈-局部变量表(一)【JVM】内存布局-虚拟机栈-栈帧【JVM】内存布局-虚拟机栈-初识【JVM】判断对象是否该被回收-引用计数法【JVM】垃圾回收-四种(强、软、弱、虚)引用及场景【JVM】垃圾回收-判断对象是否该被回收-可达性分析法【JVM】垃圾回算法-标记清除算法【JVM】垃圾回算法-标记复制算法原创 2021-09-25 11:34:44 · 254 阅读 · 0 评论 -
【JVM】类文件结构-常量池
目录常量池的基本知识信息字面量(Literal):符号引用(Symbolic References)整体来看常量池文章福利今天学习记录的是class文件中的常量池(constant_pool),开始之前还是给出常量池的知识坐标,明确学习的是那一块,还有相关文章点击图片放大看更清晰相关文章:【JVM】类文件结构-魔数、版本号【JVM】类文件结构-class本质及内部数据结构常量池的基本知识信息1、常量池入口紧跟 主版本号 之后2、class文件中占用最大原创 2021-09-24 23:54:13 · 220 阅读 · 0 评论 -
【JVM】类文件结构-魔数、版本号
往期好文【JVM】内存布局-虚拟机栈-局部变量表(二)【JVM】内存布局-虚拟机栈-局部变量表(一)【JVM】内存布局-虚拟机栈-栈帧【JVM】内存布局-虚拟机栈-初识【JVM】判断对象是否该被回收-引用计数法【JVM】垃圾回收-四种(强、软、弱、虚)引用及场景【JVM】垃圾回收-判断对象是否该被回收-可达性分析法【JVM】垃圾回算法-标记清除算法【JVM】垃圾回算法-标记复制算法【JVM】垃圾回算法-标记整理算法今天开始学习记录编译后class文件格式,在文章原创 2021-09-21 00:09:19 · 283 阅读 · 0 评论 -
【JVM】类文件结构-class本质及内部数据结构
目录Class本质Class文件格式Class数据类型Class文件结构相关BAT面试题:Class本质本篇文章标题小编的是Class本质,并没有说是Class文件本质,原因是一般情况下我们常见到的Class文件是以存储在磁盘中的形式存在的,然而Java虚拟机并不会这么‘死板’,只要符合Java虚拟机规范的Class信息都是可以被正确识别的,无论他是存储在磁盘中(文件),还是以二进制流的方式直接输送到类加载器中。这里可能有些牵强,磁盘中的Class文件、二进制流的Class.原创 2021-09-20 08:37:10 · 243 阅读 · 0 评论 -
【JVM】内存布局-虚拟机栈-操作数栈
目录操作数栈的概念理解操作数栈的用武之地1、人类视觉角度2、反编译JVM角度3、JVM执行角度分析其他细节信息补充说明文章福利往期好文【JVM】内存布局-虚拟机栈-局部变量表(二)【JVM】内存布局-虚拟机栈-局部变量表(一)【JVM】内存布局-虚拟机栈-栈帧【JVM】内存布局-虚拟机栈-初识【JVM】垃圾回算法-标记整理算法【JVM】垃圾回算法-标记复制算法【JVM】垃圾回算法-标记清除算法【JVM】垃圾回收-判断对象是否该被回收-可达性原创 2021-09-12 19:41:23 · 432 阅读 · 0 评论 -
【JVM】内存布局-虚拟机栈-局部变量表(二)
目录变量槽为什么复用变量槽复用的形式变量槽如何复用(验证)什么情况下会复用变量槽究竟是什么原理让其会复用呢?使用垃圾回收机制再次验证文章福利在上一篇文章中小编学习了局部变量表的相关知识内容,关于局部变量表中的变量槽复用问题在本篇文章中我们一起学习下。小编提示:为了系统性的学习,请先参阅【JVM】内存布局-虚拟机栈-局部变量表(一)变量槽为什么复用我们已经知道方法参数、局部变量是存储在局部变量表上的每个变量都是占用一定的物理空间的,即局部变量表的长度随着..原创 2021-09-11 12:49:55 · 159 阅读 · 0 评论 -
【JVM】内存布局-虚拟机栈-局部变量表(一)
文章福利:阿里巴巴编码规范-各版本下载今天小编学习的是虚拟机栈中栈帧里的局部变量表(Local Variables Table,LVT),感兴趣的小伙伴快来一起学习吧!在一个方法的编码完成后,其方法内的参数变量、局部变量都会被存储在一个叫局部变量表的容器中,你可以将这个容器理解为一个数组,这个容器还有一个专业术语叫做:变量槽(Variable Slot),它是容纳局部变量、参数的最小单位了。需要注意的细节:1、在方法写完后(编译阶段)局部变量表的长度就已经被确定了;2、每个变量槽占用原创 2021-09-09 23:24:30 · 219 阅读 · 0 评论 -
【JVM】内存布局-虚拟机栈-栈帧
文章福利:阿里巴巴编码规范-各版本下载每一个方法的运行都伴随着栈帧的入栈到出栈过程,那么栈帧中有什么呢?既然每个方法都被映射成一个个栈帧,方法中有什么则栈帧中或多或少都应该也有什么吧,思路是没问题的。方法中有什么呢?如下是一个很普通的方法:public String test(String a, Integer b){ int c = 0; int d = c + b; return a; }该方法中包含如下信息: 方法参数a 和 b;原创 2021-09-06 23:04:50 · 822 阅读 · 8 评论 -
「JVM」内存布局-虚拟机栈-初识
虚拟机栈(Virtual Machine Stack)是JVM中运行时数据区的一个重要组成部分,它关系着程序如何运行。栈的主要特点:先进后出,即最先进入栈的元素最后出来。栈:如下是将元素A、B、C、D四个元素存入栈中的示意图,该过程称为入栈(压栈)如果将上述已经放入栈中的四个元素取出来的话,必须按照如下方式取出,该过程称为出栈像这种以栈的方式存储数据的案例生活中也有许多,比如‘弹夹’,先压下去的子弹最后才能被打出。虚拟机栈:然而在Java虚拟机栈中压下去的就不...原创 2021-08-29 00:15:09 · 156 阅读 · 2 评论 -
「JVM」垃圾回算法-标记整理算法
标记整理算法的是标记清除算法的基础上有做了‘整理’阶段的操作。也可以看做是标记清除算法的优化。标记清除算法与标记整理算法步骤对比:标记清除:标记-清除标记整理:标记--整理-清除有关标记清除算法的思想原理请参阅:【JVM】垃圾回算法-标记清除算法在前几篇关于垃圾回收算法中,标记复制算法可以说是似乎很完美了,但在真实情况下,有部分地方的对象回收如果使用标记复制算法还是不行的,比如说老年代中的对象。标记整理算法背景:大家都知道,堆中对象的存放位置大致有:新生代、老年代,新生代..原创 2021-08-22 09:50:23 · 1034 阅读 · 0 评论 -
「JVM」垃圾回算法-标记复制算法
标记复制算法在第一代标记清除算法的基础上做出了优化,优化了哪些点呢?1、垃圾回收后没有了碎片化空间2、执行效率上变快了下面看看标记复制算法的思想细节并思考以上两点优化1963年 M.L.Minsky 发表了一篇论文:CALISP Garbage Collector Algorithm Using SerialSecondary storage(使用双存储区的Lisp语言垃圾收集器)该论文主要讲述了复制算法相比于清除算法的一些优势。很多人认为标记复制算法分为两个步骤:标记(Mar...原创 2021-08-20 22:32:51 · 2179 阅读 · 2 评论 -
深入理解Java虚拟机 – 阅读class文件的三种姿势(连载2)
对于熟悉Java程序语言的人来说,JVM(Java Virtual Machine)是实现语言无关性的基石,被JVM所识别的.class文件是实现平台无关性的基石。这一点的具体信息可参考https://www.datapro.cool/2364.html.class文件中包含了被虚拟机所识别的字节码指令,看懂字节码指令是迈向高级架构师的一小步(不积跬步无以至千里)。本文将介绍几种如何查看class文件字节码指令的方法。.class文件中存的是被JVM识别的16进制数,这些16进制数与字节码指..原创 2021-01-01 15:53:49 · 323 阅读 · 0 评论 -
深入理解Java虚拟机 –类文件结构 阅读笔记(连载1) 无关性基石
前言:本阅读笔记参考《深入理解Java虚拟机-JVM高级特性与最佳实践》周志明•第三版“无关性基石”一词,在这里表达了两层意思,一是程序语言的无关性,二是平台(Windwos、Linux、Mac)的无关性。20几年前,计算机只识别0和1如今还是未曾改变过,但是在这20几年的时间里,众多程序语言遗弃了直接被编译为01(与操作系统相关)的编译方式,而是选择了与操作系统和机器指令集无关的中间格式平台来作为最终编译后的格式。对于Java语言开发攻城...原创 2021-01-01 15:49:32 · 162 阅读 · 0 评论 -
「JVM」垃圾回算法-标记清除算法
判断对象是否可被回收:「JVM」判断对象是否该被回收-引用计数法「JVM」垃圾回收-判断对象是否该被回收-可达性分析法如何回收?回收算法-标记清除算法:标记清除(Mark-Sweep)算法的整个过程就像其名称一样分为两步:标记(Mark)和 清除(Sweep)。标记过程:标记过程其实就是判定对象是否是可被回收对象,这步的常见的算法前面已经学习过了,只不过在Java中,最常用的是:根可达性分析算法。那么问题来了,标记那种对象呢?究竟是标记可回收对象呢?还是不可回收对象?其实..原创 2021-08-17 19:37:18 · 560 阅读 · 0 评论 -
「JVM」垃圾回收-四种(强、软、弱、虚)引用及场景
Java的垃圾回收操作几乎是不需要程序员手动去执行的,因为有强大的GC帮你,其背后的逻辑就是判断对象是否有被使用到,而对象是否有被使用的判断依据就是对象是否还有引用指向它。引用细分的话又可分为四种:强引用,软引用,弱引用,虚引用。引用说到这里其存在的作用就很明显了,主要有以下两点:1、利用引用方便操作对象(设置属性、生命周期<虚引用除外>等)2、有利于GC回收对象引用是放在JVM中的栈(Stack)中,平时的代码中常常用的是强引用,在一些底层场景中才会碰到其它等引用...原创 2021-08-15 11:48:49 · 338 阅读 · 0 评论 -
「JVM」判断对象是否该被回收-引用计数法
文章福利:IDEA最新一年激活码领取,快来Java程序在运行中,如果代码产生的对象没有被用到了,就相当于白白占用了一块内存,这个时候我们就要消除它了,以此来释放内存,毕竟内存是很宝贵的。如何判定这个对象有没有用呢?一个对象如果有引用指向它说明这个对象还在被用到,借助这个理论,我们给每个对象加一个标识-引用计数器。如果对象在A位置被引用,计数器就加一,B位置引用就再加一,B位置没有再引用对象,那么这个对象的引用数减一。很明显,当对象的引用计数器为0的时候,说明这个对象已经变为了垃圾,.原创 2021-08-14 22:57:08 · 241 阅读 · 0 评论