![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 85
leaning
小艾影
这个作者很懒,什么都没留下…
展开
-
【jvm】11类生命周期
编译阶段:将java文件编译为class字节码文件 类加载 类加载:将class字节码加载进内存 1、加载(Loading) 将class类模型相关信息加载到方法区当中。 类加载器 BootStrapClassLoader 引导/启动类加载器 核心类库 ExtensionClassLoader 扩展类加载器 特定jar包 ApplicationClassLoader 应用程序加载器/系统类加载器 自定义类 自定义类加载器 … 加载阶段 简言之,查找并加载类的二进制数据转载 2021-07-24 23:23:49 · 64 阅读 · 0 评论 -
【jvm】8-垃圾回收
教程:https://www.bilibili.com/video/BV1PJ411n7xZ 垃圾:指在运行程序中没有任何指针指枸的对象,这个对象就是需要被回收的垃圾。 垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至是全堆和方法区的回收。 Java堆是垃圾收集器的工作重点。从次数上讲: 频繁收集Young区 较少收集old区 基本不动Pern区 垃圾标记阶段 在堆里存放着几乎所有的Java对象实例,在Gc执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为转载 2021-07-09 00:21:37 · 149 阅读 · 0 评论 -
【jvm】2-类加载
类加载过程 类加载器角色 1、class file存在于本地硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载到JVM当中来根据这个文件实例化出n个一模一样的实例。 2、class file 加载到JVM中,被称为DNA元数据模板,放在方法区。 3、在.class文件-> JVM->最终成为元数据模板,此过程就要一个运输工具(类装载器class Loader),扮演一个快递员的角色。 自定义类使用系统加载器或者叫应用加载器 类加载过程:加载、【验证、准转载 2021-06-20 16:18:37 · 53 阅读 · 0 评论 -
【jvm】7-执行引擎
执行引擎 jvm三层:类加载 --> 运行时数据区 --> 执行引擎 概述 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 解释器:当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机转载 2021-07-04 23:01:20 · 83 阅读 · 0 评论 -
【jvm】9-class文件解读
成员变量的赋值过程: 默认初始化 显式初始化/代码块中初始化 构造器中初始化 有了对象之后,可以""对象.属性或"对象.方法的方式对成员变量进行赋值。 多态中:属性不存在多态性。 class文件解读 字节含义 整个class文件中相关字节所表示含义: ux:表示占几个字节,如u4=占4个字节。 魔数与版本 前4个字节:ca fe ba be 表示识别文件为class文件。 往后4个字节显示编译使用jdk的版本号 常量池 可以理解为Class文件之中的资源仓库,它是Clas文件结构中与其他项转载 2021-07-11 23:58:32 · 82 阅读 · 0 评论 -
【jvm】10-字节码指令
1、通过javap命令可以查看一个java类反汇编得到的Class文件版本号、常量池、访问标识、变量表、指令代码行号表等等信息。不显示类索引、父类索引、接口索引集合、( )、()等结构 2、通过对前面例子代码反汇编文件的简单分析,可以发现,一个方法的执行通常会涉及下面几块内存的操作 (1)java栈中:局部变量表、操作数栈。 (2)java堆:通过对象的地址引用去操作。 (3)常量池。 (4)其他如帧数据区、方法区的剩余部分等情况,测试中没有显示出来,这里说明一下。 3、平常,我们比较关注的是jav.转载 2021-07-18 23:41:13 · 247 阅读 · 0 评论 -
【jvm】6-方法区
方法区也存在垃圾回收。 运行时数据期结构图 线程共享与否角度 栈、堆、方法区交互关系 代码上: 栈堆方法结构角度: 栈 -> 堆中实例数据指针 -> 方法区中对应对象类型数据 另一个情况 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。 方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。 方法区的大小决定了系统可以保存多少个类,如果系统定.转载 2021-06-30 00:30:01 · 97 阅读 · 0 评论 -
【jvm】3-pc寄存器
pc寄存器 一个jvm对象对应一个Runtime实例 pc寄存器用于储存下一条指令对应的指令地址(偏移地址) 问:使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢? 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。 JVM的字节码解释器就需要通过改变Pc寄存器的值来明确下一条应该执行什么样的字节码指令。 问:pc寄存器为什么设定为线程私有? 线程不断切换,设定私有,容易发生线程执行混乱。为了能够准确地记录各个线程正在执转载 2021-06-20 16:26:09 · 60 阅读 · 0 评论 -
【jvm】1-常用虚拟机
由于跨平台设计,java指令都是根据栈来设计 不同平台cpu架构不同,所以不能基于寄存器 栈:跨平台性、指令集小、指令多;执行性能比寄存器差 常用虚拟机 Classic VM SUN公司虚拟机 世界上第一款商用java虚拟机 jit:即时编译器 Exact VM HotSpot VM sun公司的 jdk1.3时 成为java默认虚拟机 JRockit VM BEA的 *bea已被oracle收购 专注于服务器端应用 内部不包含解析器实现,全部代码都靠即时编译器..转载 2021-07-03 16:55:12 · 184 阅读 · 0 评论 -
【jvm】5-堆
运行时数据区 栈管运行,堆管内存 一个进程 :一个jvm实例 一个jvm : 一个运行时数据区(Runtime) 一个Runtime :一个方法区一个堆 一个线程:一套程序计数器、本地方法栈、虚拟机栈。 一个进程:多个线程 堆 jvm管理最大一块内存 内部结构 jdk7:新生区、养老区、永久区 jdk8:新生区、养老区、元空间 约定: 新生区新生代年轻代 养老区老年区老年代 永久区==永久代 设置堆空间大小 如:-Xms10m -Xmx10m 虚拟机参数: “-xms"用转载 2021-06-28 00:35:49 · 179 阅读 · 1 评论 -
【jvm】4-虚拟机栈
虚拟机栈 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 栈是运行时的单位,而堆是存储的单位。 即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 Java虚拟机栈是什么?Java虚拟机栈(Java virtual Machine stack),早期也叫Java栈。 每个线程在创建时都会创建一个转载 2021-06-20 16:39:49 · 51 阅读 · 0 评论