zoukankan      html  css  js  c++  java
  • 什么是JVM

    1:什么是jvm

    是运行所有Java程序的抽象计算机,运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。

    java的跨平台是必须要有jvm的支持,就是不同平台支持jvm,然后才能一份java程序在不同平台运行。

    参考: java虚拟机

    2:进程角度

    虚拟机jvm就是一个操作系统中的进程实例

    jvm在操作系统中运行,进程是操作系统的执行单位,启动一个java的程序,就是一个JVM进程实例,虚拟机进程启动就绪,然后由虚拟机中的类加载器加载必要的class文件,包括jdk中的基础类(如String和Object等),然后由虚拟机进程解释class字节码指令,把这些字节码指令翻译成本机cpu能够识别的指令,才能在cpu上运行。

    3: jvm如何吃进java语言编写的程序?

    java虚拟机内部,有一个叫做类加载器的子系统,这个子系统用来在运行时根据需要加载类,

    "根据需要"
    在Java虚拟机执行过程中,只有他需要一个类的时候,才会调用类加载器来加载这个类,并不会在开始运行时加载所有的类。

    4:jvm如何处理java的字节码文件?

    由虚拟机加载的类,被加载到Java虚拟机内存中之后,虚拟机会读取并执行它里面存在的字节码指令。虚拟机中执行字节码指令的部分叫做执行引擎。Java虚拟机会进行自动内存管理。具体说来就是自动释放没有用的对象,而不需要程序员编写代码来释放分配的内存。这部分工作由垃圾收集子系统负责。

    从上面的论述可以知道, 一个Java虚拟机实例在运行过程中有三个子系统来保障它的正常运行,分别是类加载器子系统, 执行引擎子系统和垃圾收集子系统。 如下图所示:

     
    image.png

    虚拟机的运行,必须加载class文件,并且执行class文件中的字节码指令。它做这么多事情,必须需要自己的空间。就像人吃下去的东西首先要放在胃中。这里的空间就是内存了。

    5: 什么是jvm的空间或者内存?

    虚拟机也需要空间来存放个中数据。首先,加载的字节码,需要一个单独的内存空间来存放;一个线程的执行,也需要内存空间来维护方法的调用关系,存放方法中的数据和中间计算结果;在执行的过程中,无法避免的要创建对象,创建的对象需要一个专门的内存空间来存放。

     
    image.png

    小结:

    1: 虚拟机并不神秘,在操作系统的角度看来,它只是一个普通进程

    2: 这个叫做虚拟机的进程比较特殊,它能够加载我们编写的class文件。如果把JVM比作一个人,那么class文件就是我们吃的食物。

    3: 加载class文件的是一个叫做类加载器的子系统。就好比我们的嘴巴,把食物吃到肚子里。

    4: 虚拟机中的执行引擎用来执行class文件中的字节码指令。就好比我们的肠胃,对吃进去的食物进行消化。

    5: 虚拟机在执行过程中,要分配内存创建对象。当这些对象过时无用了,必须要自动清理这些无用的对象。清理对象回收内存的任务由垃圾收集器负责。就好比人吃进去的食物,在消化之后,必须把废物排出体外,腾出空间可以在下次饿的时候吃饭并消化食物。

    后面将分析类加载子系统,内存分配,垃圾收集子系统的原理

    来一张框架图:


     
     类加载系统

     https://www.cnblogs.com/lanqingzhou/p/12374340.html

  • 相关阅读:
    链表中倒数第K个结点
    关于栈的经典问题---判断一个栈的出栈序列是不是有效的
    剑指Offer-用两个栈实现队列
    Netty与NIO
    牛客-反转数字
    N叉树的最大深度-DFS
    version can neither be null, empty nor blank
    剑指 Offer 16. 数值的整数次方
    Vue基础语法与指令
    ES6常用语法
  • 原文地址:https://www.cnblogs.com/lanqingzhou/p/13601149.html
Copyright © 2011-2022 走看看