
JVM
文章平均质量分 92
amyacker
这个作者很懒,什么都没留下…
展开
-
栈帧结构
栈帧栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表丶操作数栈丶动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧。与当前栈帧相关联的方法,称为当前方法。局部变量表局部变量表(Local Variable Table)是一组变量值存储空间,用于存放方法参数和方原创 2021-04-20 04:59:59 · 2854 阅读 · 0 评论 -
虚拟机类加载机制
title: 虚拟机类加载机制date: 2021-04-15 22:01:58categories: JVMtags: JVM前言虚拟机类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验丶转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载丶验证丶准备丶解析丶初始化丶使用和卸载7个阶段。其中验证丶准备丶解析3个部分统称为连接。Java.原创 2021-04-19 00:38:26 · 213 阅读 · 0 评论 -
Java Class文件详解
Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列才Class文件之中,中间没有添加任何分隔符。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分隔成若干个8位字节进行存储。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两个数据类型:无符号数和表。无符号数:属于基本的数据类型,以u1丶u2丶u4丶u8分别代表1个字节丶2个字节丶4个字节丶8个字节的无符号数,无符号数原创 2021-03-11 03:13:30 · 1425 阅读 · 0 评论 -
Java 内存分配与回收策略
内存分配对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代。对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。注:Minor GC 和 Full GC有什么不一样吗?新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为原创 2021-03-04 04:10:34 · 236 阅读 · 0 评论 -
Java 垃圾收集器
Serial原创 2021-03-02 02:07:32 · 431 阅读 · 2 评论 -
Java对象详解
1丶对象的创建当虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载丶解析和初始化过。如果没有,那么必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有用过的内存都放一边,空闲的内存放别外一边,中间放着一个指针作为分界点的指示器,那所分配的内原创 2021-02-18 01:18:34 · 498 阅读 · 1 评论 -
Java 内存模型与线程
1丶硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器的运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复杂到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性。在多处理器系统中,每个处理器都有自己的高速缓存原创 2021-02-17 03:26:18 · 142 阅读 · 1 评论 -
Java 垃圾回收基础
1丶引用计数算法引用计数算法的基本思路是就是给对象添加一个引用计数器,每当一个地方引用它时,计数器的值就加1;但引用失效时,计数器的值就减一;任何时刻计数器为0的对象就是不可能再被使用的。缺点:引用计数算法它很难解决对象之间互相循环引用的问题。2丶可达性分析算法可达性分析算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。即使是不可达的对象,也并非是“非原创 2020-07-28 11:19:40 · 156 阅读 · 0 评论 -
Java JVM内存区域
前言Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将包括以下几个运行时数据区域。1丶程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支丶循环丶跳转丶异常处理丶线程恢复等基础功能都需要依赖计数器来完成。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行原创 2020-07-28 11:13:13 · 114 阅读 · 0 评论