wenyl 的个人博客 wenyl 的个人博客
Tags Archives Links
  • 开始使用
  • Tags
  • Archives
  • Links
  • Search
  • RSS
一、定义 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为以下几个区域,并统称为运行时数据区 其中线程共享的区域有堆和方法区 线程不共享的区域有程序计数器、Java虚拟机栈和本地方法栈 二、程序计数器 程序计数器(Program Counter Register)是一个较小的内存空间,字节码解释器工作时就是通过改变这个计数器的值来选择下一条需要执行的字节码指令 每个线程都有一个独立的程序计数器,多线程环境下程序计数器用于跟踪每个线程执行的位置 如果线程正在执行的是一个Java方法,这个计数器记录的值是正在执行的虚拟机字节码指令的地址;乳沟正在执行的是本地native方法,这个计数器则值为空 在Java虚拟机规范中,这个内存区域是没有OutOfMemoryError情况的区域 三、栈 3.1 Java虚拟机栈 Java虚拟机栈也是线程私有的,他的生命周期与线程相同; 每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(stack frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息 栈帧是JVM栈的基本单位,每当调用一个方法时,就会为该方法创建一个新的....

Java虚拟机--运行时数据区

java
一、类生命周期 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
一、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各个版本能够保持非常良好的向后兼容性,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
一、简介 Java虚拟机(JVM,Java Virtual Machine)是一种虚拟计算机,它提供了一个运行环境,使得编译后的Java程序可以在几乎所有的计算机平台上执行,而无需针对每个平台进行单独的编译。以下是JVM的一些关键概念和特点: 平台独立性 : JVM的核心价值在于它实现了“一次编写,到处运行”的理念。Java源代码被编译成字节码(Bytecode),这是一种中间语言,由JVM解释并在本地平台上执行。这意味着相同的字节码可以在不同的操作系统和硬件架构上运行,只要存在对应的JVM实现。 字节码与JVM : Java编译器将Java源代码编译成字节码,字节码是一种低级别的指令集,由JVM解释或即时编译(JIT)成机器码执行。字节码的使用保证了程序的安全性和可移植性。 内存管理 : JVM管理着应用程序的内存分配和垃圾回收。它分为几个主要的内存区域,包括: 堆(Heap) :用于存储对象实例和数组。 方法区(Method Area) :存储类信息、常量、静态变量、即时编译器编译后的代码缓存。 栈(Stack) :线程私有的,用于存储局部变量、操作数栈、动态链接和方法出口....

Java虚拟机--简介

JVM
vi /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.cn-hangzhou.aliyuncs.com", "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru" ] } systemctl daemon-reload systemctl restart docker

docker hub无法访问处理方法

docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 31 →
RSS 开始使用
wenyl - 鸡汤太好喝啦

Open Source, Open Mind,
Open Sight, Open Future!
182 文章
0 浏览     5 当前访客
© 2025 wenyl 的个人博客