• jvm 的主要组成部分_java培训


    Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。JVM包含两个子系统和两个组件,两个子系统为 (类装载)、执行引擎);两个组件为 (运行时数据区)、 (本地接口)。

    1.类加载器(Class Loader):加载类文件到内存。Class loader只管加载,只要符合文件结构就加载,至于能否运行,它不负责,那是有Exectution Engine 负责的。

    2.执行引擎(Execution Engine):也叫解释器,负责解释命令,交由操作系统执行。

    3.本地库接口(Native Interface):本地接口的作用是融合不同的语言为java所用

    4.运行时数据区(Runtime Data Area):

    (1)堆。堆是java对象的存储区域,任何用new字段分配的java对象实例和数组,都被分配在堆上,java堆可用-Xms和-Xmx进行内存控制,jdk1.7以后,运行时常量池从方法区移到了堆上。

    (2)方法区:用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
    误区:方法区不等于永生代
    很多人原因把方法区称作“永久代”(Permanent Generation),本质上两者并不等价,只是HotSpot虚拟机垃圾回收器团队把GC分代收集扩展到了方法区,或者说是用来永久代来实现方法区而已,这样能省去专门为方法区编写内存管理的代码,但是在Jdk8也移除了“永久代”,使用Native Memory来实现方法区。

    (3)虚拟机栈:虚拟机栈中执行每个方法的时候,都会创建一个栈桢用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

    (4)本地方法栈:与虚拟机发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

    (5)程序计数器。指示Java虚拟机下一条需要执行的字节码指令。

    组件的作用:
    首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。

  • 相关阅读:
    Promise实例.then()链式调用,中段Promise链,Promise错误穿透.catch()
    自制操作系统日志——第九天
    语义分割在线标注思路
    RoCE多网卡时,报文可以过去,但是回不来
    Linux常用命令——find命令大全
    Flutter入门-与原生数据传递
    pycharm新建html
    M1芯片使用android-emulator-m1-preview模拟器提示INSTALL_FAILED_INSUFFICIENT_STORAGE 解决办法
    Go 语言中 For 循环:语法、使用方法和实例教程
    Leetcode.965 单值二叉树
  • 原文地址:https://blog.csdn.net/zjjcchina/article/details/126370462