zoukankan      html  css  js  c++  java
  • java虚拟机--JVM

    • java虚拟机

          是安装在计算机操作系统上的一个虚拟计算机。

          专门用于处理java程序和底层操作系统的链接工作,将java程序翻译成底层的操作系统可以理解的语言。

          有别于JDK。JDK是java的开发环境,是java开发人员需要的,里面除了JVM,还有一些其他的东西。JVM是小于JDK的。

    JVM的结构图如下图所示:

        1. 类加载器:加载类文件到内存。[这里的类文件是class文件]

        2. 运行数据区:1中加载的class文件,全部保存在运行数据区。java能够很好的运行,也是得益于运行数据区的管理。

        3. 执行引擎:也叫做解释器,负责讲class文件解释成操作系统的语言。

        4. 本地接口:本地接口的初衷是为了实现java中调用其他的C/C++的程序,于是就在内存中开辟了一个本地方法栈,用于等级本地方法,然后在执行引擎的时候调用本地方法。[现在使用的越来越少了]

    • java内存管理

        1. 栈-stack

          是java的程序运行区,在线程创建的时候创建,生命周期跟随线程的生命周期,所以栈中不存在垃圾回收的问题。

          栈中存放是数据包括:

                  本地变量[输入参数、输出参数以及方法内的参数];

                  栈操作[记录入栈和出栈的操作];

                  栈帧数据[类文件、方法等]。

      

        2. 堆

         一个JVM实例中存放一个堆内存,堆内存的大小是可以调节的。类加载器读了类的文件后需要把类、方法、常变量放置在堆中。

         堆内存又分为:

          1) 永久存储区

            常驻内存中的区域,存放JDK自身所携带的class、interface的元数据,都是一些运行环境必须的资源信息。不会被垃圾回收器回收。

          2)新生区

            类产生的区域。新生区又被分为两个部分:伊甸区和幸存者区。幸存区又被分为0区和1区。伊甸区new出新的类,当伊甸区满的时候,垃圾回收将这个区域整理回收,没有被回收的放到0区去。0区满了,垃圾回收又整理回收,没有回收的放到1区去。1区满了就整理到养老去去。

          3)养老区

            

          3. 方法区

            被所有的线程所共享,保存:字段和方法字节码,以及一些特殊的方法如构造函数和接口代码。这里保存的有类变量。

          4. PC register 程序计数器

            指导执行引擎找到下一条指令

          5. 本地方法栈

    • 相关问题

        堆和栈区别

           对存放的是对象,而对象内的临时变量存放在栈内存中;栈是跟随线程的,堆是跟随JVM。

        类变量和实例变量的区别

           类变量前面有static修饰,是类的变量;实例变量的实例new出来的。类变量存储在方法区中;实例变量存储在堆中。

        java的方法传递的是值OR地址

             都不是,对于原生数据传递的值,引用类型传递的地址。   

  • 相关阅读:
    一、入门实例
    十四、事物配置
    JAVA-调用http链接
    ORACLE 年龄计算到月份
    ORACLE和MYSQL 去重查询
    JAVA--将图片转为BASE64编码并返回thymeleaf页面
    JAVA--将图片保存至项目路径
    java--获取类加载路径和项目根路径
    excel执行INSERT和UPDATE操作语句
    c# 未能加载Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342
  • 原文地址:https://www.cnblogs.com/lxq0309/p/3742095.html
Copyright © 2011-2022 走看看