一、类生命周期 1.1 加载 通过类全限定名获取它的二进制字节流 从ZIP压缩包、JAR、EAR、WAR中获取 从网络中获取,例如Web Applet 运行时计算生成,如动态代理技术 从数据库读取 从加密文件中获取 将这个字节流所代表得静态存储结构转化为方法区得运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据得访问入口 1.2 链接 1.2.1 验证 验证阶段确保加载的类的信息符合JVM规范,不会对JVM造成危害。这包括对字节码的结构、常量池中的索引、数据类型等进行检查。 文件格式验证 魔数是否是CAFEBABE 主次版本是否在虚拟机支持范围内 ...... 元数据验证 这个类是否有父类(除了java.lang.Object外,其他类都有父类) 父类是否继承了不允许被继承的类 ...... 字节码验证 确保类型转化是有效的,例如把父类对象赋值给子类数据类型就是无效的 ...... 符号引用验证 符号引用中的类、字段、方法的可访问性(private\protected\public\)是否可以被当前类访问 在指定类中是否.... 有更新! Java虚拟机--类加载器 程序人生
一、简介 Java各个版本能够保持非常良好的向后兼容性,Class文件结构的稳定性功不可没,不同版本的Java虚拟机规范也只是在原有基础上新增内容、扩充功能。 二、Class类文件结构 这里只列举class文件各项标识得作用,详细信息可以参考官网第 4 章。类 File Format (oracle.com) 2.1 Class文件内容 文件内容如下 ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[metho.... 有更新! Java虚拟机--字节码文件结构 JVM
一、javap -v javap是jdk自带的反编译工具,可以通过控制台查看字节码文件内容 javap -v 字节码文件 二、JClasslib idea可以安装这个插件,直接在插件市场就能搜索到,安装完成后,选中class文件,点击view,就可以看到对应选项 三、阿里Arthas 3.1 简介 官网文档https://arthas.aliyun.com/ Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率 3.2 下载安装 下载地址https://arthas.aliyun.com/arthas-boot.jar git指定版本下载地址Releases · alibaba/arthas (github.com) 编写如下代码并运行 public class HelloWorld { public static void main(String[] args){ Thread thread = n.... Java虚拟机--常用工具 JVM
一、简介 Java虚拟机(JVM,Java Virtual Machine)是一种虚拟计算机,它提供了一个运行环境,使得编译后的Java程序可以在几乎所有的计算机平台上执行,而无需针对每个平台进行单独的编译。以下是JVM的一些关键概念和特点: 平台独立性 : JVM的核心价值在于它实现了“一次编写,到处运行”的理念。Java源代码被编译成字节码(Bytecode),这是一种中间语言,由JVM解释并在本地平台上执行。这意味着相同的字节码可以在不同的操作系统和硬件架构上运行,只要存在对应的JVM实现。 字节码与JVM : Java编译器将Java源代码编译成字节码,字节码是一种低级别的指令集,由JVM解释或即时编译(JIT)成机器码执行。字节码的使用保证了程序的安全性和可移植性。 内存管理 : JVM管理着应用程序的内存分配和垃圾回收。它分为几个主要的内存区域,包括: 堆(Heap) :用于存储对象实例和数组。 方法区(Method Area) :存储类信息、常量、静态变量、即时编译器编译后的代码缓存。 栈(Stack) :线程私有的,用于存储局部变量、操作数栈、动态链接和方法出口.... Java虚拟机--简介 JVM
一、简介 1.1 定义 DevOps 是一种文化和哲学,它强调软件开发 (Dev) 和 IT 运维 (Ops) 之间的紧密协作与整合,目的是提高软件产品的交付速度和质量。DevOps 的核心理念在于打破传统软件开发过程中开发团队和运维团队之间的壁垒,通过自动化和持续改进的方法来缩短从开发到部署的时间,并确保整个流程的高效率和可靠性。 DevOps 的关键实践包括: 持续集成 (CI) :开发人员频繁地将代码提交到共享的存储库,自动化构建和测试确保每次提交的质量。 持续交付 (CD) :软件可以随时被部署到生产环境,自动化测试和部署管道保证了软件的可部署性。 持续部署 (CD) :自动将所有更改部署到生产环境,无需人工干预。 基础设施即代码 (IaC) :使用代码来定义和管理基础设施,确保一致性、可重复性和可审计性。 监控和日志记录 :实时监控系统性能和健康状况,收集数据以便分析和改进。 自动化 :自动化所有可以自动化的任务,减少人为错误和加快部署速度。 文化 :鼓励开放沟通、协作和共同承担责任,促进团队之间的信任和透明度。 反馈循环 :快速收集用户反馈并将其纳入开发流程,以快速响应市场.... 有更新! DevOps学习笔记 DevOps
一、简介 SonarQube官网 SonarQube是一个用于持续检查代码质量的静态代码分析平台。它提供了自动化的代码审查工具,帮助开发团队持续监测和改进代码的质量。SonarQube可以检测并报告多种代码质量问题,包括: 重复代码 (Duplication):找出代码中的重复部分,减少维护成本。 潜在的bug (Bugs):识别可能导致运行时错误或逻辑问题的代码模式。 代码规范 (Code Smells):检查不符合最佳实践或编码标准的代码结构。 安全性漏洞 (Security Hotspots):标识可能的安全风险点,如SQL注入或跨站脚本攻击。 缺少或过度的注释 :确保代码有适当的文档化。 设计问题 (Design):分析代码架构和设计模式,避免不良设计如“意大利面条代码”。 测试覆盖率 (Test Coverage):测量单元测试对代码的覆盖程度。 SonarQube支持多种编程语言,如Java、Python、C#、JavaScript、PHP等,并且可以集成到持续集成(CI)和持续部署(CD)流程中,确保每次代码提交都经过质量检查。 SonarQube由SonarSource.... 有更新! docker compose安装SonarQube+SonarScanner centos