JVM学习笔记——内存结构篇在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存结构部分
我们会分为以下几部分进行介绍:
- JVM整体介绍
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
- 直接内存
JVM简述首先我们给出JVM的定义:
- Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)
- 一次编写,到处运行
- 自动内存管理,垃圾回收功能
- 数组下标越界检查
- 多态
文章插图
目前我们所讲述的JVM知识基本都是基于HotSpot类型的JVM
JVM总体路线我们给出JVM的整体框架,而该框架也是我们学习JVM的总体路线:
文章插图
我们的学习顺序如下:
- JVM内存结构
- GC垃圾回收
- Java Class
- ClassLoader
- JIT Compiler
- 请给出JVM,JRE,JDK之间的区别
文章插图
我们来做出简单介绍:
- JVM是我们的Java程序最基本的底层架构,我们通过JVM来实现Java源代码和操作系统之间的交互
- JRE在JVM的基础上添加了我们平时所使用的基础类库,包括有Net Framekwork的核心类库等相关库
- JDK在JRE的基础上又添加了编译工具,包括有jar打包工具,Java运行工具,Javac编译工具,Javadoc文档工具等
- JavaSE程序在JDK的基础上又添加了我们常用的开发工具,市面上我们常见的IDEA或者VS等系列工具
- JavaEE是在 JavaSE 的基础上构建的,它提供Web 服务,通信 API等,可以用来实现企业级的面向服务和Web 3.0应用程序 。
程序计数器简述首先我们给出程序计数器的简单定义:
- Program Counter Register 程序计数器(寄存器)
- 程序计数器主要用于记录下一条jvm指令的执行地址
- 程序计数器默认情况下不可能出现内存溢出
- 程序计数器是一块较小的内存空间,它通常采用寄存器代替
- 程序计数器绑定线程,每个线程有且只有一个程序计数器,它随着线程创建而创建,随着线程销毁而销毁
0: getstatic #20// PrintStream out = System.out;3: astore_1// --4: aload_1// out.println(1);5: iconst_1// --6: invokevirtual #26// --9: aload_1// out.println(2);10: iconst_2// --11: invokevirtual #26 // --14: aload_1// out.println(3);15: iconst_3// --16: invokevirtual #26// --19: aload_1// out.println(4);20: iconst_4// --21: invokevirtual #26// --24: aload_1// out.println(5);25: iconst_5// --26: invokevirtual #26// --29: return
我们下面进行简单解释:- 首先我们的注释部分是Java的源代码,左侧部分是我们的二进制字节码即jvm指令
- jvm指令中前面的位置是我们的执行地址(物理地址),中间是相关执行指令,最后面带#是常量地址(我们后面会讲到)
- 我们的jvm代码是不能直接与cpu交互的,我们需要通过解释器将jvm代码编程机器码,才可以与cpu进行交互
经验总结扩展阅读
- 【lwip】08-ARP协议一图笔记及源码实现
- 用一台笔记本电脑如何赚钱(笔记本电脑赚钱的办法)
- 小米笔记本Pro15增强版评测_小米笔记本Pro15增强版评测表现
- 笔记本电脑CF中烟雾头怎么调(win10cf新版本烟雾保护头怎么调)
- 笔记本电脑配置高低怎么区分(笔记本电脑看什么配置判断好坏)
- 四 【单片机入门】应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用
- pytorch、paddlepaddle等环境搭建 深度学习环境搭建常用网址、conda/pip命令行整理
- 三十九 Java开发学习----SpringBoot整合mybatis
- 2023年圣诞节学习运有所提升的星座智慧多多成绩提升
- 电脑开不了机怎么办简单方法(笔记本电脑开不了机)