销售型网站如何做推广ASP网站建设招聘

张小明 2026/1/10 18:57:58
销售型网站如何做推广,ASP网站建设招聘,开发制作app软件,wordpress 324字节码的变身记#xff1a;从.class文件到运行时对象 一、类加载阶段 .class文件 - 加载#xff08;Loading) - 链接(Linking) - 初始化 - 使用 - 卸载 ^ 验证准备解析 前两篇我们完成了#xff1a; 解码#xff1a;拆解了.cla…字节码的变身记从.class文件到运行时对象一、类加载阶段.class文件 - 加载Loading) - 链接(Linking) - 初始化 - 使用 - 卸载 ^ 验证准备解析前两篇我们完成了解码拆解了.class文件的二进制结构CAFEBABE、常量池、方法表...定位追踪了ClassLoader如何找到目标字节码双亲委派、SPI机制那么问题来了找到的字节码如何活起来变成我们能new出来的对象让我们通过一个具体例子追踪类的完整加载过程// Main.java public class Main { public static void main(String[] args) { System.out.println(开始加载Student); Student student new Student(张三, 20); System.out.println(student); } } // Person.java class Person { static { System.out.println(Person静态块执行); } static final String SPECIES 人类; // 准备阶段赋值 static int population 0; // 准备阶段0初始化0 String name; Person(String name) { this.name name; population; } } // Student.java class Student extends Person { static { System.out.println(Student静态块执行); } static final int MAX_AGE 25; // 准备阶段赋值 static int studentCount 0; // 准备阶段0 int score; Student(String name, int score) { super(name); this.score score; studentCount; } }执行流程1. 执行java Main ↓ 2. 加载Main类触发原因主类 ↓ 3. 初始化Main类执行main()方法 ↓ 4. main()第一行打印开始加载Student ↓ 5. main()第二行new Student(张三, 20) ↓ 6. 检查Student类是否加载 → 未加载 ↓ 7. 加载Student类Loading阶段 ↓ 【关键步骤】在加载Student时JVM发现其父类Person未加载 ↓ 8. 先加载父类Person - 读取Person.class二进制 - 创建Person的Klass元空间 - 递归检查Person的父类Object并加载 ↓ 9. 然后加载Student类 - 读取Student.class二进制 - 创建Student的Klass元空间 - 建立继承关系Student.klass.super Person.klass ↓ 10. 链接Person类Linking阶段 - 验证Person字节码 - 准备Person的静态变量 SPECIES 人类final直接赋值 population 0默认值 - 解析延迟进行 ↓ 11. 链接Student类Linking阶段 - 验证Student字节码 - 准备Student的静态变量 MAX_AGE 25final直接赋值 studentCount 0默认值 - 解析延迟进行 ↓ 12. 【注意】此时两个类都已加载和链接但都未初始化 ↓ 13. 初始化Student类前发现父类Person未初始化JVM检查 ↓ 14. 初始化Person类父类优先 - 执行Person.clinit() - 打印Person静态块执行 - population初始化为0其实还是0因为默认值就是0 ↓ 15. 初始化Student类 - 执行Student.clinit() - 打印Student静态块执行 - studentCount初始化为0 ↓ 16. 创建Student实例 - 调用Student.init构造器 - 先调用super() → Person.init - population (1) - studentCount (1)Loading阶段的核心问题放哪里JVM加载后的Klass、Class分别数据存放在JVM规定内存的哪块区域首先需要对JVM内存区域划分有个大致的概念参考以下草绘图图中两处⭐️标记出了class在内存中的存放位置。1. Meta Space元空间⭐️存放内容Klass信息KlassHotSpot虚拟机内部用来表示Java类的C对象特点JVM内部使用的数据结构包含完整的类元信息vtable、方法代码、布局信息等分配在本地内存Native Memory不在Java堆中在Loading阶段创建2. Java Heap堆⭐️存放内容Class对象java.lang.ClassJava程序运行时使用的类对象特点Java标准的反射API入口作为锁对象synchronized(MyClass.class)分配在Java堆中参与GC注意不是在Loading阶段创建而是在Initialization阶段创建当Klass对象在本地内存中被创建完成即代表Loading阶段完成下一个阶段——Linking验证、准备、解析——将为类的活动做好最后的安全检查和资源准备。Linking阶段的核心问题Verification检查文件内容各项是否符合JVM规范1. 格式验证魔数、版本、常量池格式 2. 元数据验证继承规则、final约束 3. 字节码验证类型安全、控制流 4. 符号验证引用存在性Preparation为静态变量分配内存(元数据区设置默认值//比如各类型赋默认值 static int x 5; // 准备阶段x 0 static boolean a true; //a false static Object o new Object(); //o null //特殊处理final常量准备阶段即赋值 //准备阶段会直接赋值通常需要符合1.final修饰2.基本类型3.编译阶段能确定的值常量/常量表达式 static final int y 10; // 准备阶段y 10常量Resolution解析引用将符号引用转换为直接引用的过程HotSpot默认采用延迟解析策略——只有在第一次实际使用时才进行解析和绑定解析结果会缓存起来供后续使用这显著提升了启动性能和减少了内存占用。字节码中的符号引用如前文中提到的 Constant Pool: #1. Methodref #... #2 Fieldref #... #3. NameAndType #... ...直接引用是可以直接被CPU使用的内存地址信息它可能是指针、偏移量或索引但最终目的都是避免运行时的查找过程。Initialzation阶段的核心问题加载的最终阶段让类可以正式投入使用创建Class对象堆内执行clinit()方法建立Klass与Class对象的双向引用clinit()方法是由 Java 编译器自动生成的类初始化方法它负责处理所有静态成员的初始化逻辑。如果类不存在静态变量和静态代码块则JVM不会处理clinit()具体做了些什么静态变量的最终赋值在准备阶段已经为静态变量赋了默认值比如 static int a 5; 此时a 0 - a 5;静态代码块执行static { // do smt }相当于是Class存在于JVM内部的构造函数只负责静态部分保证一次且仅一次执行这也是为什么静态代码中不能访问实例成员--因为此时可能还没有任何实例被创建。二、运行时对象实例对象创建位置与内存分配大多数情况下新创建的对象都会在Young Gen - Eden区分配针对大对象基于不同的收集器会有不同的分配策略。CMS收集器 Concurrent Mark-Sweep· 大对象直接进入Old Gen参数-XX:PretenureSizeThreshold3M任何大小超过这个参数阈值的对象将直接在老年代分配避免大对象在eden区创建导致空间不足以及Eden - Survivor之间的复制。CMS老年代是使用并发标记-清除算法不涉及对象复制直接将大对象分配在老年代可以避免昂贵的复制开销和触发YoungGC对年轻代造成影响。·风险点如果老年代空间不足或因为大对象生命周期很短会引发频繁且不必要的fgc。G1收集器Garbage-First·大对象有专门区域Humongous Region如果一个对象大小超过单个Region大小的50% 就会被定义为大对象。大对象不在Eden Region分配分配时G1会尝试找到连续的、空闲的Region来存放这些被大对象占用的Region即Humongous Region。因为G1是将堆划分成N个固定大小的Region进行管理没有物理上的Young/Old Gen之分所以为大对象专门设计了管理区域避免碎片化。-XX:G1HeapRegionSize决定了Region的大小也决定了大对象的定义阈值比如-XX:G1HeapRegionSize2M)即超过1M的对象就会进入Humongous Region。对象的组成结构运行时对象在堆中的结构由三部分组成对象头Mark Word/Klass指针/数组长度如果是数组对象实例数据缓存行填充确保缓存行对齐大小保持8的倍数主要关注对象头⭐️Mark WordMark Word 是 Java 对象头的一部分存储了对象的运行时状态信息。其结构在不同状态下会复用相同的 32/64 位空间以节省内存以64位为例无锁状态Lock2bits: 01biased_lock1bit 0age4bits对象分代年龄015identity_hashcode31bits仅调用hashcode()后会生成对象哈希值cms_free1bitCMS垃圾收集标记unused25bits未使用空间仅无锁状态下才会在Mark Word中存储哈希值线程获取锁时默认切换偏向锁状态偏向锁状态Lock(2bits):01biased_lock(1bit):1(标记为偏向状态)age(4bits):015thread ID54bits持有偏向锁的线程IDepoch2bits偏向版本号线程访问时优先检查biased标记若biased_lock 1则检查epoch若对象epochKlass.epoch代表偏向有效才会去检查threadID是否相等若epoch ! Klass.epoch,则当前线程会尝试CAS重偏向替换threadID若CAS失败则会升级为轻量锁unused(2bits): 未使用空间通过无锁和偏向锁对比可以看出无锁状态有31bits空间存储hashcode而偏向锁优化时需要54bits空间来存放持有的线程ID此时hashcode与threadID互斥先获取hashcode则无法进入偏向锁状态先进入偏向锁状态再获取hashcode则会强行撤销偏向锁状态进入无锁状态后续再发生竞争则会直接进入重量锁状态轻量级锁状态Lock2bits00代表轻量锁状态prt_to_lock_record62bits指向栈帧中锁记录的指针轻量级锁的加锁过程便是通过CAS尝试将无锁/偏向锁状态的对象头替换为指向锁记录的指针无锁状态可直接获得锁偏向锁状态会先尝试偏向锁撤销退回无锁状态再尝试替换对象头成功则获取轻量级锁失败则膨胀为重量级锁在轻量锁状态获取hashcode同样会直接膨胀为重量锁重量级锁Lock2bits10prt_to_monitor62bits指向ObjectMonitor的指针重量级锁状态会创建ObjectMonitor实例其中存储了锁关键信息如owner原始对象头竞争队列等待队列重入次数等待线程数以及hashcode等信息到这一步才算真正到达了系统层面的线程竞争通过操作系统原语实现线程调度/上下文切换/CAS自旋等复杂机制总结从.class文件到运行时对象JVM通过类加载机制加载-链接-初始化在元空间创建Klass结构、在堆中创建Class对象最终实例化时在堆中分配对象内存其对象头Mark Word会根据使用情况动态变化锁状态无锁/偏向锁/轻量锁/重量锁整个过程体现了延迟加载、分层初始化、空间复用等优化设计让字节码“活”成真正的Java对象。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

崇信门户网站留言回复前端个人网站怎么做

第一章:错过这1次深度剖析,你可能就错过了下一代智能配送的技术入口在物流行业加速智能化转型的今天,智能配送系统已从“可选项”变为“必选项”。其核心不再局限于路径优化或无人车调度,而是构建一个融合边缘计算、实时决策与自适…

张小明 2026/1/10 0:00:25 网站建设

淘宝api wordpress网站搭建 商城 seo

面向全场景的 Java 通用流程编排框架。同时兼容 java8 ~ java25,是 OpenSolon 的重要组成部分。支持已知流程编排的各种场景: 可用于计算(或任务)的编排场景可用于业务规则和决策处理型的编排场景可用于可中断、可恢复流程&#…

张小明 2026/1/10 3:21:07 网站建设

wordpress建立商业网站哪些做园林的网站

第一章:Open-AutoGLM操作日志加密存储概述在分布式智能推理系统中,Open-AutoGLM 的操作日志包含敏感的模型调用、参数传递与执行轨迹信息。为保障数据隐私与系统安全,所有操作日志必须在生成后立即进行端到端加密,并以密文形式持久…

张小明 2026/1/6 12:37:05 网站建设

公司网站上线的通知php 网站迁移

YOLOFuse双流检测实战:低光烟雾环境下mAP高达94.7% 在城市安防监控的深夜场景中,摄像头前浓烟滚滚,能见度不足五米,普通RGB相机画面几乎一片漆黑。然而,后台系统却依然精准标记出多个移动目标——这不是科幻电影&#…

张小明 2026/1/6 17:06:38 网站建设

wordpress统计点击ip镇江seo优化

离职原因背后的职业态度 在软件测试领域,离职原因的回答不仅体现职业素养,更映射测试人员特有的质量保障思维。根据2025年行业调研报告,83%的面试官会通过此问题评估候选人的沟通能力与职业成熟度。 一、测试岗位的离职应答核心原则 1. 技术…

张小明 2026/1/5 4:08:48 网站建设

手机上可以创建网站吗kuake自助建站系统源码

FOFA技术团队实测:Kotaemon在网络安全问答系统中的表现分析 在企业安全运营中心(SOC)的日常工作中,一个常见的场景是:某位工程师突然收到告警,提示“疑似Log4j漏洞利用流量”,他立刻想知道——这…

张小明 2026/1/5 4:08:16 网站建设