`
yucang52555
  • 浏览: 69989 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

深入java虚拟机——体系结构

阅读更多

      当Java虚拟机运行一个程序时,它需要内存来存储多个东西、例如,字节码、从已装载的class文件中得到的其他信息、对象、方法参数、返回值、局部变量以及运算的中间结果等等,Java虚拟机把这些东西组织到几个"运行时数据区"中,以便于管理。     

      先贴一下结构图:

     

       某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有,每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,它把这些类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。

       每个Java虚拟机都有一个类装载子系统,它根据给定的全限定名来装入类型(类或接口)。同样,每个Java虚拟机都有一个执行引擎,它负责执行那些包含在被装载类的方法中的指令。当JAVA虚拟机运行一个程序时,它需要内存来存储许多东西,例如:字节码、从已装载的class文件中得到的其他信息、程序创建的对象、传递给方法的参数,返回值、局部变量等等。Java虚拟机把这些东西都组织到几个“运行时数据区”中,以便于管理。

      某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有。每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有的线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后把这些类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。

      当每一个新线程被创建时,它都将得到它自己的PC寄存器(程序计数器)以及一个Java栈,如果线程正在执行的是一个Java方法(非本地方法),那么PC寄存器的值将总是指向下一条将被执行的指令,而它的Java栈则总是存储该线程中Java方法调用的状态——包括它的局部变量,被调用时传进来的参数、返回值,以及运算的中间结果等等。而本地方法调用的状态,则是以某种依赖于具体实现的方法存储在本地方法栈中,也可能是在寄存器或者其他某些与特定实现相关的内存区中。Java虚拟机为每一个线程创建的内存区,这些内存区域是私有的,任何线程都不能访问另一个线程的PC寄存器或者Java栈。盗用一张图:


 
      Java栈是由许多栈帧(stack frame)组成的,一个栈帧包含一个Java方法调用的状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中,当该方法返回时,这个栈帧被从Java栈中弹出并抛弃。Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。这样设计的原因是为了保持Java虚拟机的指令集尽量紧凑、同时也便于Java虚拟机在那些只有很少通用寄存器的平台上实现。另外,Java虚拟机这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。

 

程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。

  • 大小: 25.6 KB
  • 大小: 45.9 KB
0
0
分享到:
评论

相关推荐

    实战Java虚拟机——JVM故障诊断与性能优化

    包括但不限于体系结构、虚拟机的调试方式、常用参数、垃圾回收系统、Class文件结构、执行系统等,力求从多角度更专业地对Java虚拟机进行探讨。  4. 通俗易懂。简单的白话文风格贯穿全书,尽量做到读者在阅读过程中...

    MiniJavaVM—个Java虚拟机的设计和实现

    MiniJavaVM—个Java虚拟机的设计和实现 在本篇文章中,我们将详细介绍 MiniJavaVM 的设计和实现,包括其总体架构、功能、运行环境和开发工具,以及具体的实现步骤。 第一章绪论 Java 虚拟机(Java Virtual ...

    深入java虚拟机第二版

    《深入Java虚拟机第二版》是一本专注于Java技术体系中核心部分——Java虚拟机(JVM)的深度解析书籍。本书全面介绍了JVM的工作原理、内存管理、性能优化以及相关工具的使用,对于理解Java程序的运行机制和提升开发...

    深入java虚拟机第二版分卷1-5

    Java虚拟机的体系结构包含多个组件,如堆、栈、方法区、本地方法栈和程序计数器等。堆是所有线程共享的一块内存区域,用于存储对象实例;栈每个线程独有,用于存储局部变量和方法调用信息;方法区存储类信息、常量、...

    深入JAVA虚拟机第二版

    《深入JAVA虚拟机第二版》是一本专注于Java技术体系中核心部分——Java虚拟机(JVM)的权威著作。本书全面、深入地探讨了JVM的工作原理,是Java开发者提升技术水平,理解Java运行机制,优化代码性能的重要参考资料。...

    一个Java虚拟机的设计和实现

    ##### 1.2 Java虚拟机的体系结构 JVM的架构主要包括以下几个关键组件: - **类装载子系统**:负责读取.class文件,并将其转化为运行时数据结构。 - **运行时数据区**:包括方法区、堆、线程私有的本地方法栈和程序...

    黑马程序员入学Java知识——精华总结.doc

    以上只是Java知识体系的一部分,深入学习Java还需要掌握更多的概念和技术,如反射、注解、泛型、Lambda表达式、并发编程、Spring框架等。通过不断学习和实践,你可以成为一位出色的Java开发者。

    Java安全体系结构1

    Java安全体系结构是Java平台的核心组成部分,它为Java的三大特性——平台无关性、网络移动性和安全性提供了坚实的基础。本文将深入探讨Java如何通过其语言特性、类加载器和安全管理器来实现安全性。 首先,Java的源...

    Java语言程序设计-1-Java概述

    Java平台的运行环境配置通常指的是安装JDK(Java Development Kit),它包含Java运行时环境(JRE),以及Java虚拟机(JVM)等组件。通过JDK提供的编译器可以编译Java源代码为字节码,字节码由JVM解释执行。 Java的...

    北大的java——ppt课件.rar

    它以其“一次编写,到处运行”的特性闻名,因为Java程序可以在任何支持Java虚拟机(JVM)的平台上运行。在北大这门Java课程的PPT课件中,可能会涵盖以下几个重要的Java编程基础知识: 1. **Java语法**:包括变量、...

    面向对象程序设计——JAVA.pdf

    这份资料涵盖了Java的基础知识,包括Java的起源、体系结构、主要特性,以及如何搭建Java开发环境和配置系统环境变量,最后还介绍了编写并运行第一个Java程序的步骤。 Java是一种由Sun公司(现已被Oracle收购)于...

    JAVA基础知识概述

    #### 一、Java语言特点与体系结构 **Java** 是一种广泛使用的高级编程语言,因其强大的功能性和灵活性,在企业级应用、移动应用(尤其是Android平台)、Web应用等多个领域都有着不可替代的地位。Java的核心优势在于...

    30种java技术框架图

    JVM架构则是Java虚拟机的内部结构,它负责执行Java程序,是实现跨平台的关键。JVM的主要组件包括类加载器、运行时数据区、执行引擎、本地接口和垃圾收集器。 Java技术体系指的是基于Java语言的软件开发技术集合,它...

    JAVA文件编译执行与虚拟机(JVM)介绍

    ### JAVA文件编译执行与虚拟机(JVM)介绍 #### 关键知识点概述: 1. **JAVA文件的编译与执行**:JAVA程序首先通过编译器转换为中间代码(字节码),然后由JVM解释执行。 2. **JVM的角色与功能**:JVM作为JAVA程序...

    Java基础教程

    - **体系结构中立性**:Java程序编译成的字节码可以在任何实现了Java虚拟机(JVM)的平台上运行。 #### 四、Java发展历史与版本演进 - **Java SE、Java EE、Java ME**:Java分为三个主要版本——Java SE(标准版)、...

    虚拟机的设计与实现 C C++下载

    在C和C++中实现虚拟机,首先需要理解虚拟机的体系结构,包括指令集架构(ISA)、内存模型和执行引擎。虚拟机的指令集通常是一个定制的、简化的二进制格式,用于模拟真实计算机的指令。设计这样的指令集需要考虑其...

    java学习各阶段书籍指南

    1. 《深入理解Java虚拟机》:这本书是学习Java虚拟机(JVM)不可或缺的参考书籍,尽管翻译可能一般,但内容的深度和广度使其成为Java程序员的必读材料。建议至少阅读两遍,最好结合最新的JVM规范。 2. 《Java ...

    JAVA程序设计习题库及答案(免费下载)

    **解析:** Java采用了独特的执行方式——先编译为字节码,然后由Java虚拟机(JVM)解释执行。这种方式既保证了程序的可移植性,也提高了程序的执行效率。 3. **题目:** 下列关于虚拟机说法错误的是: - **答案:*...

Global site tag (gtag.js) - Google Analytics