做网站运营需要会什么,连云港网站建设 连云港网站制作,上海企业网站建设制,网站建设的整个流程目录
一 类加载过程
二 JVM内存模型
三 对象的创建过程
四 双亲委派机制
五 垃圾回收机制
1 标记-清除
2 标记-复制
3 标记-整理
六 垃圾回收器
1 早期 Serial Serial Old
2 中期 Parallel Scavenge Parallel Old
3 过渡期 #xff1a;CMS ParNew
4 最新 Serial Old
2 中期 Parallel Scavenge Parallel Old
3 过渡期 CMS ParNew
4 最新G1 一 类加载过程
类加载的过程是指将类的.class文件加载到JVM内存当中并对数据进行处理最终形成可以被JVM使用的Java的类型的过程。
总结流程 加载找 .class 文件 - 读到内存方法区 - 在堆里创建 Class 对象。 链接 验证检查 .class 文件是否合法、安全。 准备为 static 变量在方法区分配内存并设置默认初始值 (0, false, null)。static final 常量编译期可知则在此阶段直接赋指定值。 解析把常量池里的符号引用名字替换成直接引用内存地址/偏移量。 初始化执行 clinit() 方法给 static 变量赋程序设定的值执行 static {} 块中的代码。首次主动使用时触发 clinit 是 JVM 自动生成的类初始化方法在类加载的“初始化”阶段执行用于执行静态变量赋值和静态代码块在这个阶段才会把用户指定的初始值覆盖掉之前准备阶段赋予的零值。 面试官问题对于类加载的过程你是如何理解的 我首先类加载的核心目的是将类的.class文件加载到JVM内存当中对数据进行操作后形成可以被JVM使用的Java的类型的过程。这部分操作分为三个阶段加载链接初始化而链接又分为验证准备解析。加载阶段JVM会寻找Class文件将类的字节码数据包括类结构信息字段方法常量池等解析后存入方法区当中在堆当中创建Class对象这个对象是java.lang.Class的实例作为反射入口并提供访问方法区当中类元数据的接口。链接当中的验证阶段会对应的检查.class文件是否安全合法准备阶段会对static变量在方法区分配内存并设置默认值解析阶段会将方法区类的常量池的符号引用转变为直接引用存在延迟解析策略初始化阶段JVM会执行clinit()方法会给static变量赋予程序设定的值执行存在static的代码块。 补充 加载阶段会将Class文件中的常量池内容加载到方法区当中变为运行时常量池static final在主备阶段就会为变量赋予程序设定的值实例变量及其所属的对象数据只有在程序执行到 new 指令时才会在堆中动态分配内存并初始化。main 方法作为Java程序的执行入口其栈帧在虚拟机栈中创建负责启动程序逻辑并可能触发后续的对象创建和堆内存分配。延迟解析是JVM内部的自动化优化策略目的是避免在类加载阶段解析所有可能未使用的符号引用。在JDK7及之前永久代是对方法区的具体实现并且永久代存储在堆内存当中他的大小受JVM堆参数的限制。在JDK8及之后方法区这个概念依旧存在但是不再使用永久代方法区的实现被替代成元空间元空间不再使用堆内存使用的是本地内存。 AI分点 它的核心目的是将编译后的Java类.class文件加载到JVM内存中经过转换和处理最终形成JVM可以直接使用的Java类型即Class对象。整个过程主要分为三个阶段加载Loading、链接Linking、初始化Initialization其中链接阶段又细分为验证Verification、准备Preparation、解析Resolution。 加载 JVM通过类加载器查找并读取.class文件的二进制字节流。 将字节流所代表的静态结构解析并转换为方法区在HotSpot等JVM中常由元空间实现内的运行时数据结构存储类结构、字段、方法、常量池等信息。 在堆内存中创建一个java.lang.Class对象。该对象是访问方法区中类元数据的入口也是Java反射机制的基石。 将Class文件中的常量池加载到方法区转换为运行时常量池。 链接 验证 对加载的字节码进行严格检查确保其符合JVM规范、格式正确、逻辑安全不会危害虚拟机自身。 准备 在方法区中为类变量static变量分配内存空间并设置该数据类型的默认初始值零值如0, 0L, 0.0f, 0.0d, null, false。(可选补充对于final static修饰的基本类型和String字面量常量在此阶段就会被直接赋值为程序中定义的值)。 解析 将运行时常量池中的符号引用如类/接口全名、字段名和描述符、方法名和描述符替换为直接引用指向目标在内存中的具体指针、偏移量或句柄。解析动作可以发生在初始化之前也可能采用延迟策略等到该符号引用第一次被主动使用时才进行。 初始化 这是类加载的最后一步开始执行用户定义的Java初始化代码。 JVM执行编译器自动生成的类构造器clinit()方法。这个方法由类中所有类变量赋值语句和静态代码块static {}块按源代码顺序合并而成。 clinit()方法的主要作用是为类变量赋予程序中定义的初始值覆盖准备阶段设置的零值并执行静态块中的逻辑。 关键点 JVM会确保一个类的clinit()方法在多线程环境下被正确地加锁同步线程安全且只被执行一次。
至此类就完成了加载过程可以被JVM用来创建实例、访问静态成员、调用方法等。
二 JVM内存模型
JVM管理内存的物理划分包含5个核心区域 堆 (Heap) 存储内容所有对象实例和数组 方法区 (Method Area) 存储内容类元信息、常量池、静态变量、JIT 编译代码 虚拟机栈 (JVM Stack) 存储内容栈帧局部变量表、操作数栈、动态链接、方法出口 本地方法栈 (Native Method Stack) 存储内容Native 方法如 C/C 代码的执行状态 程序计数器 (PC Register) 存储内容当前线程执行的字节码指令地址 三 对象的创建过程
阶段关键操作JVM 子系统1. 类加载检查验证类是否加载未加载则触发类加载过程类加载器2. 内存分配在堆中分配内存指针碰撞/空闲列表/TLAB内存管理器3. 内存初始化所有字段置零值0/null/false执行引擎4. 设置对象头写入 Mark Word、Klass 指针等元数据执行引擎5. 执行 init初始化字段 → 构造代码块 → 构造函数父类优先执行引擎6. 建立引用关联将堆中对象地址绑定到栈帧的局部变量运行时数据区协作
四 双亲委派机制
阿里二面双亲委派机制原理能打破吗-CSDN博客 什么是双亲委派机制 “类加载请求优先委派给父加载器”只有所有父加载器都无法完成加载时返回 null 或抛出 ClassNotFoundException子加载器才会尝试自己加载。 通过递归委派最终由 最顶层的启动类加载器Bootstrap 优先尝试加载。 确保类的加载从最高层级向下传递形成严格的层次结构。 解决的问题 安全性防止用户自定义类冒充核心类如伪造 java.lang.String。 唯一性避免同一个类被不同加载器重复加载破坏 equals()、instanceof 等行为。 有序性明确类加载的责任边界如核心类 → 扩展类 → 应用类 → 自定义类。
通过这种机制Java实现了类加载的层次结构。它可以确保类的加载是有序的从最高级的类加载器向下避免了重复加载、可以保证安全性确保Java当中的核心类库只能由启动类加载器加载从而防止用户自定义同名类被加载。并且可以自定义类加载器实现特定的加载策略。
每个类加载器有独立的加载范围 启动类加载器加载 JRE/lib 核心库如 rt.jar 扩展类加载器加载 JRE/lib/ext 扩展库 应用类加载器加载用户类路径-classpath 指定的路径 自定义类加载器开发者自定义的路径如网络、加密文件等
当需要加载一个类时子类加载器收到请求会向上委派直到启动类加载器Bootstrap加载成功则返回结果失败将返回null表示无法加载下一级接收到返回值null然后在下一级类加载器的路径下尝试如果所有的父类都失败子类加载器调用自身的findClass()进行加载如果自身的加载机制仍然无法加载该类则会抛出ClassNotFoundException异常。 打破双亲委派机制 为何标准的双亲委派模型在某些场景下不够灵活
方案可以自定义一个类加载器继承自ClassLoader类并重写loadClass方法。在LoadClass方法当中我们可以自定义类的加载逻辑。
五 垃圾回收机制
概念垃圾回收是JVM的一种内存管理机制他会自动回收不再被使用的对象占用的内存空间从而避免手动释放内存的操作。 在堆内存当中从垃圾回收的范围上说一般分为两种正对新生代的垃圾回收动作叫做MinorGC也叫做YoungGC针对老年代的垃圾回收动作叫做MajorGC由于MajorGc发生的时候通常也会伴随着MinorGC。FullGC针对整个堆内存 1 可达性分析算法思想 从一系列被称为GC Roots的根对象出发沿着对象之间的引用链进行搜索。所有能被GC Roots直接或间接引用到的对象就是存活对象反之任何GC Roots都无法到达的对象就是可回收的垃圾对象。 2 三种核心回收算法 标记-清除 | 标记-复制 | 标记-整理 这三种算法都是基于可达性分析来确定对象是否存活。 1 标记-清除 从GCRoots出发遍历整个对象图标记出所有的存活对象对象头设置标志位扫描内存将未被标记的对象占用的内存块加入空闲列表产生不连续内存碎片。当碎片无法满足大内存分配时触发 Full GC 并切换为标记-整理算法。 空闲列表是管理碎片化内存的核心数据结构用于解决标记-清除算法产生的内存碎片问题。空闲列表是一个记录堆内存当中所有空闲内存块位置和大小的双向链表。
清除阶段不会物理擦除垃圾对象数据而是将其占用的内存块加入空闲列表。后续分配新对象时从空闲列表搜索合适碎片分配。若无足够连续碎片则触发 Full GC 执行标记-整理算法重组内存。 2 标记-复制 将新生代内存分为三个区域一个是Eden伊甸区一个是Survivor0(From空间)一个是Survivor1(To空间)。Eden满时触发MoniorGC标记Eden区和From区的存活对象将存活对象复制到To区更新所有指向这些对象的引用地址清空Eden区和From区交换From/To的角色。
这里复制到To区会将年龄1达到阈值会晋升老年代。 “Eden 区占80%Survivor0/1各占10%” 3 标记-整理 从GCRoots出发遍历整个对象图标记所有的存活对象将所有的存活对象向内存起始端滑动使其连续排列同时更新对象的内存引用。最后回收标记对象区域外的碎片空间。
六 垃圾回收器 垃圾回收器的发展
1 早期 Serial Serial Old
Serial 是工作在新生代的垃圾回收器也称 Serial New采用标记-复制算法其搭档 Serial Old 负责老年代回收采用标记-整理算法。两者均为单线程工作模式垃圾回收时触发 STWStop-The-World所有用户线程暂停待回收完成后恢复。
2 中期 Parallel Scavenge Parallel Old
作为 Serial 的多线程升级版Parallel Scavenge新生代和 Parallel Old老年代在 STW 期间并行执行垃圾回收。
3 过渡期 CMS ParNew
ParNew是Parallel Scavenge的并发增强版搭配CMS使用CMS作为首个并发老年代收集器。
初始标记STW标记GCRoots直接关联的对象并发标记用户线程与标记线程并发执行重新标记STW:修正并发期间的引用变更。并发清除清理垃圾对象。与用户线程并发执行
4 最新G1 传统分代实现的是老年代与新生代的物理隔离。
G1分区Eden/Suriver/Old逻辑分代物理统一同一个区域的2024个 java -XX:PrintCommandLineFlags -version CMD查看垃圾回收器版本 知识点补充 实例变量与局部变量的区别
特性实例变量成员变量广义修饰符不能有 static可以包含 static 或非 static存储位置堆对象实例内部静态变量在方法区实例变量在堆 文章转载自: http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.rbzd.cn.gov.cn.rbzd.cn http://www.morning.mmplj.cn.gov.cn.mmplj.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.spkw.cn.gov.cn.spkw.cn http://www.morning.wmfh.cn.gov.cn.wmfh.cn http://www.morning.dplmq.cn.gov.cn.dplmq.cn http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn http://www.morning.xcszl.cn.gov.cn.xcszl.cn http://www.morning.tbksk.cn.gov.cn.tbksk.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.fbnsx.cn.gov.cn.fbnsx.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.sfwcx.cn.gov.cn.sfwcx.cn http://www.morning.rltw.cn.gov.cn.rltw.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.jcjgh.cn.gov.cn.jcjgh.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn http://www.morning.ykwqz.cn.gov.cn.ykwqz.cn http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.kqkmx.cn.gov.cn.kqkmx.cn http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn http://www.morning.rykmf.cn.gov.cn.rykmf.cn http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn http://www.morning.nynpf.cn.gov.cn.nynpf.cn http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.mlpch.cn.gov.cn.mlpch.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.rkkpr.cn.gov.cn.rkkpr.cn http://www.morning.qtsks.cn.gov.cn.qtsks.cn http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn http://www.morning.ldynr.cn.gov.cn.ldynr.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.nxkyr.cn.gov.cn.nxkyr.cn http://www.morning.grpfj.cn.gov.cn.grpfj.cn http://www.morning.rflcy.cn.gov.cn.rflcy.cn http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.bpmdg.cn.gov.cn.bpmdg.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.nynyj.cn.gov.cn.nynyj.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.taipinghl.cn.gov.cn.taipinghl.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.zzjpy.cn.gov.cn.zzjpy.cn http://www.morning.playmi.cn.gov.cn.playmi.cn http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn http://www.morning.dyght.cn.gov.cn.dyght.cn