• JVM系列(一):Java虚拟机(JVM)概述


    一、JVM概念

    Java虚拟机:Java Virtual Machine(JVM)是一个抽象的计算模型,相对于实体计算机,它是一个虚拟的环境,有自己的指令集和执行引擎,可以在运行时操控内存区域。

    目的:为在JVM之上运行的应用程序,提供一个运行环境。可以开发自己的JVM。

    二、类文件格式

    1. JVM不关心编程语言的语法,而是关注类文件*.class,类文件*.class与Java面向对象中的类结构没有关系

    2. *.java文件->编译器->*.class类文件,包含字节码->JVM执行->底层平台执行(OS和硬件)

    三、JVM vs C/C++

    1. Java编译器是半编译,只编译为类文件;C/C++编译器会直接编译成二进制文件

    2. Java不需要改代码,编译一次就在不同平台上执行;C/C++在不同平台上,需要被平台的编译器重新编译

    3. 虽然Java编译器生成的类文件是平台无关的,但是JVM是与特定平台相关的,每个平台有自己的JVM

    四、JVM vs JRE vs JDK

    1. JRE:Java Runtime Environment,Java运行的标准环境,是JVM的一个实现,每一个在JRE上运行的java程序都会创建一个JVM实例,通过类加载器加载到运行环境中

    2. JDK:Java Develop Kit,Java开发的最小环境,包含JRE,也就是开发环境要包含运行环境

    五、类加载器Class Loader加载过程

    1. 加载含有字节码的类文件和标准Java类文件,标准Java类文件位于/jre/lib目录下

    2. 扩展机制定位扩展的类库,扩展类位于/jre/lib/ext目录下

    3. 如果要加载的类没有在标准类库和扩展类里,加载器会搜索CLASSPATH环境变量下定义的文件路径

    六、内存分类

    1. 堆Heap:用于存储动态或临时分配的内存空间,类和数组是在堆里创建的,当超出堆的可用内存空间时,会引发GC

    2. 栈Stack: 用于存储局部变量和方法调用的临时结果,每一次方法调用会创建一个栈

    3. 方法区:JVM线程间的共享存储区

    4. 寄存器:用于执行字节码指令

    七、JVM功能

    1. 加载:通过类加载器加载类文件

    2. 链接:链接类文件,交给JVM运行时执行

    3. 初始化:分配内存和调用构造方法设置初始值

    参考资料:http://www.importnew.com/25438.html

  • 相关阅读:
    extjs多文件上传的问题
    DOM操作基本用法
    js计时函数实现秒表的开始-暂停-清零功能
    CSS之美化页面
    CSS概述
    HTML5一些标签和属性
    表单
    C# 导入文件日期格式(dd/MM/yyyy)
    excel多个文件合并
    cmd git批量删除当前目录下的所有模块指定远程分支
  • 原文地址:https://www.cnblogs.com/june0816/p/6397246.html
Copyright © 2020-2023  润新知