Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • java

  • spring

  • springboot

  • springcloud

  • git

  • maven

  • nginx

  • tomcat

  • springmvc

  • jvm

    • JVM上篇-内存与垃圾回收篇

    • JVM中篇-字节码与类的加载篇

    • JVM下篇:性能监控与调优篇

    • 个人总结

      • jvm相关
        • JVM常用调优参数方法
    • 正则表达式

    • 消息中间件

    • python

    • 后端
    • jvm
    • 个人总结
    ~chao
    2022-11-24
    目录

    jvm相关

    jvm相关

    # 1.jdk、jre、jvm的关系

    # 1、jdk

    JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。

    # 2、jre

    JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。

    # 3、jvm

    JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

    JDk包含JRE,JDK 和 JRE 中都包含 JVM。

    jvm

    # 2.Java执行流程

    # 1.java代码
    # 2.前端编译器
    # 3.Java字节码
    # 4.类加载器
    # 5.解释、编译、执行

    # 3.jvm的架构模型

    # 1.基于栈的架构模型

    特点不依赖硬件,可移植性好,可以跨平台

    # 2.基于寄存器的架构模型

    特点依赖硬件,性能更高

    # 4.几种虚拟机

    # 1.sun classic
    # 2.exact jvm
    # 3.hotspot 主流
    # 4.JRockit
    # 5.IBM J9

    # 5.Java类加载的七个阶段

    1669164823978-c5a5afe0-517d-4726-a3dd-60165d9cc6eb

    加载、验证、准备、解析、初始化、使用、卸载

    # 6.代码块的执行顺序

    (25条消息) 【 java 面向对象】代码块以及不同位置对属性赋值的执行顺序_馆主阿牛的博客-CSDN博客 (opens new window)

    第一步:先执行父类的静态代码块

    第二步:再执行子类的静态代码块

    第三步:再执行父类的代码块

    第四步:再执行父类的构造方法

    第五步:再执行子类的代码块

    第六步:再执行子类的构造方法

    # 7.帮助理解的一个类

    如果一个属性是静态的,它会按照代码的顺序执行,如果 int A在静态代码块之前,输出的Son.B就是2,如果在静态代码块之后,Son.B就是1.

    public class Test {
         static class Father{
             #public static int A =1;
            static {
                A =2;
            }
          public static int A =1;
        }
        static class Son extends Father{
            public static int B =A;
    
        }
    
        public static void main(String[] args) {
            System.out.println(Son.B);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 8.类加载器的分类

    # 1.引导类加载器(图片中的启动类加载器,用C语言写)
    # 2.自定义类加载器(图片中除了启动类加载器,其他的都是自定义加载器,跟图片中的自定义加载器定义范围不一样,用java语言写)

    其中扩展类加载器和系统类加载器都继承了Classloader,引导类加载器和自定义类加载体是包含关系,非继承关系

    u=49644513,4273250051&fm=253&fmt=auto&app=138&f=JPEG

    # 9.双亲委派机制

    image-20221123142651763

    双亲委派机制存在的意义: 1.通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。 2.通过双亲委派的方式,还保证了安全性。因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。那么,就可以避免有人自定义一个有破坏功能的java.lang.Integer被加载。这样可以有效的防止核心Java API被篡改。

    # 10.在jvm中判断两个class对象是否完全一致。

    1.包名完全一致

    2.加载这个类的classloader(指的是classloader的实例对象)必须相同

    # 11.jvm的后台线程

    1.虚拟机线程

    2.周期任务线程

    3.GC线程

    4.编译线程

    5.信号调度线程

    # 12.pc寄存器

    pc寄存器存储下一条指令的地址,由执行引擎获取地址,调用并执行。

    它是唯一一个在内存中没有javaOutofMemoryError的区域

    有垃圾回收的区域堆和方法区(元空间)

    有可能出现内存溢出错误的区域,方法区、堆、栈

    编辑 (opens new window)
    上次更新: 2024/01/26, 05:03:22
    使用OQL语言查询对象信息
    JVM常用调优参数方法

    ← 使用OQL语言查询对象信息 JVM常用调优参数方法→

    最近更新
    01
    python使用生成器读取大文件-500g
    09-24
    02
    Windows环境下 Docker Desktop 安装 Nginx
    04-10
    03
    使用nginx部署多个前端项目(三种方式)
    04-10
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式