首页 > 编程语言 >备战面试day02--java虚拟机

备战面试day02--java虚拟机

时间:2022-10-12 10:00:36浏览次数:52  
标签:初始化 java 字节 -- 虚拟机 线程 内存 加载

  1. jvm内存模型  

  主要分为运行时区域和非运行时区域 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1.1非运行时区域

    •   类加载系统

     当程序需要执行硬盘上的字节码文件时,类加载器(classloader)会将其加载到内存中并进行初始化。

     比如说创建一个对象(new)、访问或引用一个对象中的静态变量或者静态方法、反射、初始化一个类的子类时,就需要对类进行初始化和加载,这些是主动加载。

     但如果是被动加载,比如说访问类中的静态常量或者以对象作为元素创建集合就不会对类进行初始化,这就是主动加载和被动加载的区别。

      •     类加载过程

      加载:将字节码文件从硬盘结构转为内存结构

      链接:

        验证:验证所加载的字节码文件是否会对jvm造成破坏,格式语法是否正确

        准备:为静态变量进行初始化赋值,但并不会为静态常量赋值

        解析:将符号引用(文件中的逻辑引用)转为直接引用(实际内存地址值)

      初始化:初始化静态成员变量

      •     类加载器以及其分类

      类加载器是加载类的类

      启动类加载器:用c语言编写的

      其他类加载器:java编写

        扩展类加载器:负责加载\jre\lib\ext目录下的类,包含应用程序类加载器

        应用程序加载器:负责加载程序中的类

      •     双亲委派机制 为了确保类加载的正确性、安全性,在类加载时,采用双亲委派机制;当需要加载程序中一个类时,会先让类加载器的父级去加载,直到最顶级的启动器类加载器;如果父级找到了返回使用,如果依然没找到就委派给子级去加载,找到了就返回;如果所有类加载器都没找到,报类找不到异常。
        **优点:**安全,避免了自己写的类替换了系统中的类,避免类重复加载。
    •   本地方法栈

    这里面会装由native修饰的方法,这些方法基本上都不是java写的,而是系统层面用c或其他语言编写。

    •   执行引擎

    用于执行本地方法栈中的方法、字节码文件,修改程序计数器中的数值等

   1.2运行时区域

    • 堆区

      主要用于存储字符串、对象信息,jvm内存调优主要是这一块。

    • 栈区 存储线程私有的信息,内存地址
      •   当一个线程开始执行方法的时候,它的专属栈区就会划分出一块内存作为方法栈(栈帧),每个栈帧又划分为局部变量表(记录变量符号)、操作数栈(作为临时内存,记录需要进行运算操作的数据,当运算完毕,将数据赋值给局部变量表的变量符号)、动态链接(根据符号找到内存地址值)、方法出口这几个基本区块。
    • 元空间
      •   java1.8之前称为方法区,之后改为元空间。存储字节码文件
    • 程序计数器
      •   记录当前线程执行指令到哪的行数。当多个线程抢占CPU时间片时,需要记录当前被抢线程执行到哪,方便下次抢回CPU使用权时继续执行。这也是线程私有的部分。

  

 

 

 

 

 

 

 

 

标签:初始化,java,字节,--,虚拟机,线程,内存,加载
From: https://www.cnblogs.com/unhabby/p/16736190.html

相关文章

  • C Sharp中使用HTTP的代码
    在云中,可以加入HTTP来提高抓取成功概率,以华科HTTP为例:HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create("​​http://ip.hahado.cn/ip​​​");WebProxymyProx......
  • AHK调用opencv(四)播放视频文件
    本节内容对open()的另一种使用参数做了研究,注意这里open()里的参数是文件名。因为视频文件不同于相机,视频文件有时长,所以死循环中需要一个判断,判断视频帧是否结束,如果结束......
  • Ubuntu系统清理步骤
    现在,试试看这4个简单的步骤,来清理你的Ubuntu系统吧。这份精简指南将告诉你如何清理Ubuntu系统以及如何释放一些磁盘空间。如果你的Ubuntu系统已经运行了至少一年,尽......
  • Java对ip地址校验
    importjava.util.Scanner;publicclassip_test{/**IP的格式:(1~255).(0~255).(0~255).(0~255)**/publicstaticvoidmain(String[]args){......
  • Stream流中的常用方法_skip与Stream流中的常用方法_concat
    Stream流中的常用方法_skipskip:跳过前几个Stream流中的常用方法_skip:用于跳过元素如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流Stream<T>skip(lo......
  • MouseValidate表单验证库扩展与优化
    前言基本使用缺陷优化与扩展使用自定义校验后续增加文本长度校验规则核心代码片段使用方法前言写这篇文档主要是为了渣土系统这样的KO(即Knockout)老项......
  • 报表导出和文件下载前端部分
    报表导出@click="exportAllItem"identity1:false,//导出exportAllItem(){if(this.identity1==true){this.$message.warning('正在......
  • 任务1 2
     ......
  • DBSCAN具有噪声的基于密度的聚类方法
     简介聚类:将原始数据分类(数据集->聚类算法->数据分组)目的:希望将数据根据特征的密度找相似性,分为指定或者若干数据组使用场景:简单的如将同颜色的球分类,或......
  • Task1 2
     ......