zoukankan      html  css  js  c++  java
  • 第一章、JVM和Java体系结构

       首先要知道计算机本身不识别高级语言, java程序需要经过解释编译,编译成汇编语言,汇编语言再向下转化成0、1表示的二进制机器指令,CPU执行的是机器指令

    一、java及JVM简介

    1.1、Java是夸平台的语言

      一次编译,到处运行,是因为不同的操作系统对java虚拟机都有各自的实现java语言运行在java虚拟机上,与平台无关,java虚拟机屏蔽了操作系统差异性

    1.2、Java虚拟机是夸语言的平台

      任何语言编译成的class的字节码文件只要符合虚拟机规范要求,都可以在虚拟机上运行虚拟运行的是Class字节码文件,和java源文件没有关联

    二、虚拟机与Java虚拟机

    所谓虚拟机,其实就是一台虚拟的机器,可以用来执行一系列虚拟的命令。大体上虚拟机可以分为两种:系统虚拟机和程序虚拟机。

    1. 系统虚拟机:是完全对物理计算机的仿真,可以说和一台真实的PC操作系统没什么区别。比如常用的 Vmare 以及 Visual Box 软件,通过这些软件能够模拟出具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
    2. 程序虚拟机:专门为执行单个计算程序而产生,最典型的就是Java虚拟机,在Java虚拟机中执行字节码文件命令。

                                                                                                                                                          JVM在计算机中所处的位置

    三、JVM的整体结构

    1. 方法区和堆区是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域

    1. Java栈又叫做jvm虚拟机栈

    1. 方法区(永久代)在jdk8中又叫做元空间Metaspace

      • 方法区用于存储已被虚拟机加载的类信息常量静态变量、即时编译器(JIT编译器,英文写作Just-In-Time Compiler)编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。

      • 在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代

      • 在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代

      • 在JDK1.8之后JVM 已经将运行时常量池从方法区中移了出来,在Java堆(Heap)中开辟了一块区域存放运行时常量池。同时在 jdk 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域

    四、java代码的执行流程

    •  javac命令叫做前端编译器,将java源文件编译成虚拟机能识别的字节码文件
    • JIT编译器叫做后端编译器,将反复执行的字节码指令编译成计算机能识别的0、1表示的机器指令,缓存在方法区。

    五、java的架构模型

    栈的指令集架构和寄存器的指令集架构

    由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的

        二者区别

      • 栈:适用于资源受限的场景、设计实现简单。跨平台性、指令集小、指令多;执行性比寄存器差

      • 寄存器:指令少

    六、JVM的生命周期

    6.1、启动

      通过引导类加载器(Bootstrap ClassLoader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的.

    6.2、执行

    • 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;

    • 程序开始执行的时候他才运行,程序结束时他就停止;

    • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

    6.3、退出

    • 程序正常执行结束

    • 程序异常或错误而异常终止

    • 操作系统错误导致终止

    • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作

    • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

    七、JVM的发展历史

    • SUN Classic

    • Exact VM

    • HotSpot VM :HotSpot指热点代码探测技术

    • BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一

    • IBM J9

    • Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;

    • Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品

  • 相关阅读:
    [LintCode] 1563. Shortest path to the destination
    [LintCode] 1835. Number of Ways to Stay in the Same Place After Some Steps I
    [Algo] 140. Maximum Path Sum Binary Tree III
    [Algo] 141. Binary Tree Path Sum To Target III
    [LintCode] 597. Subtree with Maximum Average
    [LintCode] 596. Minimum Subtree
    [LC] 16. 3Sum Closest
    [Algo] 182. 2 Sum All Pair II
    [Algo] 181. 2 Sum All Pair I
    创建ORACLE 查询用户
  • 原文地址:https://www.cnblogs.com/jdy1022/p/13525792.html
Copyright © 2011-2022 走看看