zoukankan      html  css  js  c++  java
  • JVM概述

    Java Virtual Mechine,是一种用于计算设备的规范,它是一个虚拟出来的计算机,通过在实际计算机上仿真模拟各种计算机功能来实现的。引入JVM后,java语言在任何平台上运行不需要重新编译。Java语言使用JVM屏蔽了与具体平台相关的信息,使得java源编译程序只需生成在java虚拟机上运行的目标代码,就可以在多种平台上不加修改的运行。

    一般的高级语言,要在不同的平台上运行,需要编译成不同的目标代码。JVM在执行字节码时,把字节码译成具体平台上的具体指令执行。

    JVM有自己完善的硬件架构。如处理器,堆栈等,还有相应的指令系统。

    JVM本质上就是一个程序,当它在命令行启动时,就开始执行保存在某字节码文件中的指令。

    每个java程序都离不开JVM,java程序的运行依靠具体的java虚拟机实例。在JVM中,分别用了子系统,内存区,数据类型以及指令这几个术语来描述。这些组成部分一起展示出一个抽象化的虚拟机内部的抽象体系结构。

    JVM主要分为五大模块:

    类装载器子系统,运行时数据区,执行引擎,本地方法接口和垃圾收集模块。

    大多数JVM实现都是有垃圾收集的。而运行时数据区都是以某种形式存在于每一个java虚拟机实例中。JVM不是真实的物理机它没有寄存器,所以指令是使用java栈来存储中间数据。

    JVM是基于堆栈的虚拟机,JVM为每一个新创建的线程分配一个堆栈。堆栈是操作系统在建立某个进程或者线程时,为其建立的存储区域,该区域具有先进后出的特点。每一个java应用都唯一对应JVM实例,每个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并有应用所有线程共享。java中所有对象的存储空间都是在堆中分配的,但这个对象的引用是在栈中分配的。

     堆内存用来存储由new新建的对象和数组。由GC来管理。

    栈中存放基本类型或引用类型的变量。

    JVM只有一个堆区被所有线程共享,每个线程包含一个栈区,每个栈中的数据都是私有的,其他栈不能访问。

    方法区又称静态区,跟堆一样,被所有线程共享,方法区中包含的永远都是整个过程中永远唯一的元素,如class,static变量。

  • 相关阅读:
    基于事件的异步编程
    基于任务的异步编程
    C#异步编程
    C#2.0
    Mac上安装Brew
    PHP中三维数组转二位数组,并且根据某个字段去重
    LNMP环境安装Laravel之后, 除了根目录下可以访问, 其他都是404页面
    LNMP一键安装包安装的mysql远程连接不上的问题
    CentOS7 安装Redis4.0
    CentOS 7 源码包安装SVN及使用
  • 原文地址:https://www.cnblogs.com/qqguoqin/p/12745483.html
Copyright © 2011-2022 走看看