首页 > 其他分享 >JVM学习总结

JVM学习总结

时间:2024-11-03 15:17:01浏览次数:5  
标签:总结 java 虚拟机 学习 内存 JVM 方法 加载

JVM是什么?

JVM是java程序运行环境,它可以做到一次编译,到处运行

一、大体上由四部分组成

        1.类加载子系统:

          根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区

        2.执行引擎:

           负责解释命令,交由操作系统执行;

        3.运行数据区:

           我们所有所写的程序都被加载到这里,之后才开始运行

        4.本地接口:

           与native libraries交互,其他语言交互的接口

 二、执行流程

        由类加载子系统将java代码转化为字节码并加载到内存中存储在运行数据区,由于字节码并不能直接被底层cpu所执行,所以将字节码转交给执行引擎翻译成底层系统指令再调用本地接口执行整个程序

三、JVM内存结构

        程序计数器、栈、堆、方法区

        1.程序计数器:用于记录正在执行的字节码指令位置,线程私有,唯一一个不会抛异常的区域

        2.栈:

                (1) 虚拟机栈 : java方法执行时会在虚拟机栈中创建一个栈帧并进入虚拟机栈,其中存储了该方法的局部变量表,操作数栈,动态链接,方法出口等信息;每个线程都会有一个独立的栈,主要用于方法的调用,方法调用完后会被弹出栈空间,先进后出的顺序

                (2) 本地方法栈:是调用其他语言方法时存储信息的内存空间

栈内存不够时,会报 OOME内存溢出 错误,动态扩容申请深度不足也会报错

        3.堆:

                存放对象实例的内存空间,被所有线程所共享,是java虚拟机内存回收的管理的重要区域,如果堆中没有内存完成实例分配,并且堆也无法扩展时,则抛出OOME异常。

        4.方法区:

                可以认为是堆的一部分,用于存储已被虚拟机加载的信息,常量、静态变量、即时编译器编译后的代码。虚拟机启动的时候创建,关闭虚拟机时释放

                

标签:总结,java,虚拟机,学习,内存,JVM,方法,加载
From: https://blog.csdn.net/2401_82985792/article/details/143455174

相关文章

  • 关于深度学习模型不收敛问题解决办法
    1.问题重现笔者在训练Vgg16网络时出现不收敛问题,具体描述为训练集准确率和测试集准确率一直稳定于某一值,如下图所示。2.可能的原因2.1数据问题噪声数据。不平衡的数据集、含有噪声或异常值的数据可能导致模型难以学习,尝试更换数据集,出现这种问题比较难办。数据预处理......
  • 泷羽sec学习打卡-信息收集4-总结
    声明学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负关于信息收集的那些事儿-大总结一、信息收集41、wappalyzer收集2、字典收集3、指纹识别收集4、......
  • 2024-2025-1 20241320 《计算机基础与程序设计》第6周学习总结
    2024-2025-120241320《计算机基础与程序设计》第6周学习总结作业信息|这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06|这个作业的目标|Polya如何解决问题简单类......
  • C语言基础知识学习(7)
    大家好啊,本期和大家分享C语言函数相关知识。1.函数的概念我们早在数学中就接触过函数,比如:一次函数y=ax+b,a、b都是常数,给定任意一个x就可以得到y。在C语言中也引入函数(function)概念,更准确的翻译应该为:子程序。C语言中函数就是完成某一特定功能的一段代码。一个大的任务可以分......
  • C++学习笔记
    一、从C转向C++1.1、使用const和inline而不#define使用constconstintm=10;intn=m;上述代码在C中,编译器会先到m的内存中取出数据,再赋值给n;但在C++中,会直接将10赋值给n。C++的常量更类似于#define,是一个替换过程。#define经常不被认为是语言的一部分。define本......
  • 11.3 学习日志
    今天把tomcat插件弄好了找到了idea一直连接不上我的数据库的原因然后复习了一下隐式转换和强制转换packagetxt;publicclasstest{publicstaticvoidmain(String[]args){inta=2;doubleb=6.9;c=a+b;}}c为double类型;小向大转换;byteshortchar在运算时都会先变......
  • 2024-2025-1 学号20241315《计算机基础与程序设计》第六周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06这个作业的目标Polya如何解决问题简单类型与组合类型复合数据结构查找与排序算法算法复杂度递归代码安全作业正文......