当前位置:网站首页 > Java基础 > 正文

Java基础看jvm



在这里插入图片描述
调优大部分是在调堆区,堆区需要垃圾回收,栈区不需要。
在这里插入图片描述
JVM虚拟机内存

jdk8以前的架构
在这里插入图片描述
jdk8以后的架构
在这里插入图片描述
架构中的属性
堆:线程共享;主要存放对象实例(和数组);垃圾收集器的主要管理区域(回收垃圾);堆内存中可以存在物理上不连续的空间,只要逻辑上是连续的即可
栈:线程私有;栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法(一个方法就是一个栈帧),在栈帧中包括局部变量、操作数、动态链接方法(调用另外 的方法)、方法返回地址和一些额外的信息
程序计数器:在多线程情况下,当线程数量超过CPU数量或CPU内核数量时,线程之间就要根据时间片轮询抢夺CPU时间资源。线程之间就会进行切换。因此为了线程切换后能够恢复到正确的执行位置,每条线程都需要一个独立的程序计数器去记录其正在执行的字节码Java基础看jvm指令地址。
本地方法栈(与栈类似):线程私有;一个本地方法就是一个Java调用非Java代码的接口(即Native方法)
方法区:线程共享;不需要连续的内存,存储已被虚拟机加载的类信息、常量、静态变量,静态代码块、即时编译器(JIT Compiler)编译后的代码数据等。
元空间:同方法区,但存在于JVM外的直接内存中,其中字符串常量池以及静态变量转移到堆当中。

方法区是一种JVM规范,JDK8时方法区包括元空间和在堆上的字符串常量池以及静态变量。因此,字符串常量可以说在方法区上,也可以说在堆上。

总结:即创建一个对象的时候,对象所代表的类的信息存放在方法区,对象实例存放在堆,对象里面的局部变量、方法等存放在栈

 

在这里插入图片描述
类加载子系统
Java虚拟机将描述类的数据从class字节码文件加载到内存,并且对数据进行校验,转化,解析,初始化的工作,最终形成在内存中可以直接使用的数据类型。 这个过程叫做虚拟机的类加载机制。
作用:
1、类加载子系统负责从文件系统或者网络中加载class文件(class文件在开头有特定标识)
2、类加载器(ClassLoader)只负责class文件的加载,至于是否可以运行,由执行引擎(Execution Engine)决定
3、加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)

类加载器的分类

  • 启动类加载器
    • 负责加载JAVA_HOME/lib目录下的可以被虚拟机识别(通过文件名称,比如rt.jar``tools.jar)的字节码文件。
    • 与之对应的是java.lang.ClassLoader类。
  • 扩展类加载器
    • 负责加载JAVA_HOME/lib/ext目录下的的字节码文件。
    • 对应sun.misc.Launcher类 此类继承于启动类加载器ClassLoader。
  • 系统类加载器
    • 负责加载ClassPath路径下的字节码 也就是用户自己写的类。
    • 对应于sun.misc.Launcher.AppClassLoader类 此类继承于扩展类加载器Launcher。
  • 用户自定义加载器
    • 需要继承系统类加载器ClassLoader,并重写findClass方法。
    • 负责加载指定位置的字节码文件。通过类中的path变量指定。

双亲委派机制
介绍
Java虚拟机对class文件采用的是按需加载的方式。
也就是说当需要使用该类时才会将它的class文件加载到内存生成的class对象。
而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式。
即把请求交由父类处理,它是一种任务委派模式
工作原理
在这里插入图片描述
(1)如果一个类加载器收到了类加载请求,它并不会自己先加载,而是把这个请求委托给父类的加载器去执行
(2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的引导类加载器;
(3)如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成加载任务,子加载器才会尝试自己去加载,这就是双亲委派机制
(4)父类加载器一层一层往下分配任务,如果子类加载器能加载,则加载此类,如果将加载任务分配至系统类加载器也无法加载此类,则抛出异常

双亲委派机制优势

  • 避免类的重复加载

版权声明


相关文章:

  • java基础技术路线图2025-05-01 08:18:01
  • java基础146讲2025-05-01 08:18:01
  • 国外java基础视频2025-05-01 08:18:01
  • java基础知识试题2025-05-01 08:18:01
  • 求知讲堂java基础2025-05-01 08:18:01
  • java基础培训报名2025-05-01 08:18:01
  • java基础优点2025-05-01 08:18:01
  • java 的基础类型2025-05-01 08:18:01
  • 尚硅谷-》java基础2025-05-01 08:18:01
  • java基础418讲解2025-05-01 08:18:01