jvm 结构

Java虚拟机(JVM)是Java字节码运行的平台,隔离硬件和操作系统。它包括类加载器(BootstrapClassLoader、ExtensionClassLoader、ApplicationClassLoader)、方法区(存放类模板、常量池、属性和方法信息)、堆(对象内存分配)、栈(方法局部变量和部分结果)、程序计数器(存储执行指令地址)和本地方法栈(存放本地方法)。执行引擎执行字节码,而JavaNativeInterface允许JVM调用C/C++等语言的方法。StringTable优化了String对象的存储,减少重复创建。
摘要由CSDN通过智能技术生成

        java虚拟机 (java virtual machine ),Java 字节码运行的地方,隔离硬件与操作系统对Java代码的影响。

本文参考 JavaPoint 网站文档:JVM | Java Virtual Machine - Javatpoint

        结构:

 1.类加载器

                Bootstrap ClassLoader (启动类加载器) :是拓展类加载器的父类,负责加载lib目录下的包 ,如rt.jar 包里的所有class文件。

                Extension ClassLoader(拓展类加载器):是应用类加载器的父类,负责加载 $JAVA_HOME/jre/lib/ext  目录下的class文件。

                System/Application ClassLoader(系统/应用类加载器):加载 classPath 下的所有class文件。

             拓展1:双亲委派机制,加载class文件时会优先使用父加载器加载到的文件。

              拓展2:当我们尝试获取String类的加载器时,String.class.getClassLoader()  会得到 null,因为Bootstrap ClassLoader 是jvm底层使用C语言实现的,故无法获取。(ps: Null 不一定 是不存在,还可能是获取不到)。

       

2,方法区(Class Area)

                存放class模板(pre-class structures),一个class可以实例化出多个对象放在堆中但class始终是同一个 ;常量池(constant pool);属性(field);方法信息(method data , the code for methods)。

3,堆(Heap)

                运行时对象被分配的内存空间。

4,栈 (Stack)

                栈由栈帧组成,每一帧包含方法局部变量(local variables)和部分结果(partial result),在方法调用和返回中发挥作用。

                每一个线程有一个私有的栈,在线程创建时一同被创建。栈帧在线程调用某个方法时入栈,在方法结束后出栈。

5,程序计数器 (Program Counter Register)

                程序计数器存储了jvm正在执行的指令的地址。(PC (program counter) register contains the address of the Java virtual machine instruction currently being executed.)。个人理解:cpu轮询时间片执行不同的程序,GC时线程也会暂停, 程序计数器则记录这个暂停的点。

6,本地方法栈(Native Method Stack)

                 存放所有的本地方法 (jvm底层用C语言实现的方法),java即C++ --。

7,执行引擎(Execution Engine)

                简而言之,执行Java字节码

8,Java Native Interface 

        JNI 提供C,C++,Assembly 等语言的方法接口供JVM使用。

拓展 String Table ,Heap中 专门存放String 常量的数据结构 ,String str1 = "Hello World" ; hello world 会存放进String Table 中 ,再定义 String str2 = "Hello World" ,str1 与str2 指向同一内存地址。作用:在初始化时存放String 常量 减少String对象的重复创建,提高效率。

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值