`
ipenglei
  • 浏览: 4081 次
  • 性别: Icon_minigender_1
  • 来自: 湖面
社区版块
存档分类
最新评论

Java内存体系

    博客分类:
  • java
 
阅读更多

JVM体系结构:

1)(Class Loader)类装载子系统:负责把类从文件系统中装载入内存。

2)(Garbage Collection)垃圾回收子系统:分配内存,自动回收不再被引用对象的内在空间。

3)(Execution Engine)执行引擎子系统:

4)(Runtime Date Area)运行时数据区:

5)(Native Interface)本地接口组件:



 

Java Runtime Date Area:Java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外的一些则是与线程一一对应。与线程对应的数据区会随着线程的开始和结束而创建和销毁。


 

Program Counter Register :Java 虚拟机可以支持多线程同时执行,每一条虚拟机线程都有自己的 PC 寄存器,在任意时候一条 java 虚拟机线程只会执行一个方法的代码,这个正在被线程执行的方法称为该线程的当前方法,如果这个方法不是( native )本地的,那么 PC 寄存器就保存 java 虚拟机正在执行的方法字节码指令的地址,如果这个方法是本地的那 PC 寄存器的值就是 undefiend pc 寄存器的容量至少应当能保存一个 returnAddress 类型的数据或者一个与平台相关的本地指针的值。


 

Java Virtual Machine Stack:每个 java 虚拟机线程都会自己私有的 java 虚拟机栈( java virtual machine stack )这个栈与线程同时创建,用于存储栈帧( Frames .java 虚拟机栈的作用就是用于存储局部变量与一些过程结果的地方。另外它在方法的调用和返回中也扮演了很重要的角色。


 

Heap:Java 虚拟机中堆( heap )是可供各条线程共享的运行时内存区域局,也是供所有类实例和数组对象分配内存的区域。 Java 堆在虚拟机启动时候被创建,它存储了被自动内在管理系统( automatic storage management system )也就是垃圾回收器( garbage collector )所管理的各种对象。这些对象无需也无法显式地被销毁。


Method Area:Java 虚拟机中方法区可供各条线程共享的运行时内在区域。它存储了每一个类的结构信息,例如运行时常量池,字段和方法数据,构造 函数和普通方法的字节码内容,还包括一些在类实例接口初始化时用到的特殊方法。虽然方法区是椎的逻辑组成部分,但是简单的虚拟机实现可以选择在这个区域不 实现垃圾收集。


 

Runtime Constant Pool:运行时候常量池,每个类或者接口的常量池的运行时表示形式,包括若干种不同的常量:从编译期可知的数值字面量到必须运行期解析后才能获得的方法或字段引用。每个常量池都分配在 java 虚拟机的方法区之中,在类和接口被加载到虚拟机后,对应该的运行时常量池被创建出来。


 

Native Method Stack:本地方法栈,用来运行 native 方法的执行,如果 java 虚拟机不支持 native 方法 , 并且自己也不依赖传统栈的话可以不支持本地方法栈。


 

Frame:栈帧,用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接( Dynamic Linking ),方法返回值和异常分派,栈帧随着方法调用而创建,随着方法结束而销毁(无论方法是正常完成还是异常完成) , 栈帧的存储空间分配在 java 虚拟机栈之中,每一个栈帧都有自己的局部变量表( Local Variables ),操作数栈( Operand stack )和指向当前方法所属的类的运行时常量池的引用。

如果当前方法调用了其他方法,或者当前方法执行结束,那这个方法的栈帧就不再是当前栈帧,当一个新的方法被调用,一个新的栈帧也会随之而创建,并且随着程序控制权移交到新的方法了。


 

Local Variable:局部变量表 ,每个栈帧内部都包含一组称为局部变量表的变量列表,栈帧中局部变量表的长度由编译期决定,并且存储于类和接口的二进制表示之中


 

Operand Stack:操作数栈,每一个栈帧内部都包含一个称为操作数栈 的后进先出栈( last in first out ),操作数栈所属的栈帧在刚刚被创建的时候,操作数栈是空的。 Java 虚拟机提供一些字节码指令来从局部变量表或者对象实例的字段中复制常量或者变量值到操作数栈中,也提供了一些指令用于从操作数栈取走数据,操作数据和把操作结果重新入栈。在方法调用的时候,操作数栈也用来准备调用方法的参数以及接收方法返回结果。


 

Dynamic Linking:动态链接,每一个栈帧内部都包含一个指向运行时常量池的引用来支持当前方法的代码实现动态链接 ,在 class 文件中描述一个方法调用了其他方法或者访问其成员变量是通过符号引用( Symbolic Reference )来表示的,动态链接的作用就是将这些符号引用所表示的方法转换为实际方法的直接引用。类加载的过程中将要解析掉尚未被解析的符号引用,并且将变量访问转化为访问这些变量的存储结构所在的运行时内在位置的正确偏移量

 

以下是一个更详细的图:


 

 

以上笔记参考:http://docs.oracle.com/javase/specs/,及java虚拟机规范(java se 7版)

分享到:
评论

相关推荐

    JAVA的缓存应用介绍

    JAVA的缓存应用主要涉及到Java内存体系的理解、基础缓存的使用、缓存框架的介绍以及内存溢出状况的分析和内存检查工具的使用。在深入探讨这些话题之前,我们首先需要了解Java内存体系的基本概念。 Java内存体系主要...

    java知识体系总结

    Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它以其“一次编写,到处运行”的特性闻名,适用于开发跨平台的应用程序,包括桌面应用、企业...

    java 体系结构图,不错的总结,复习的资料

    Java内存主要分为堆内存和栈内存。堆内存存储对象实例,而栈内存存储方法调用时的局部变量。此外,Java还引入了方法区(非持久代)和程序计数器,以支持多线程和方法执行。 线程管理是Java并发编程的基础。Java提供...

    基于YARA的Java内存马检测方案设计.pdf

    为了达到这些需求,需要对Java内存马的种类及攻击路径进行分析,对内存的提取思路进行优化,对内存马检出的判断体系进行选取。 知识点五:基于YARA的Java内存马检测方案设计 基于YARA的Java内存马检测方案设计通过...

    java学习体系

    5. JVM内存管理和垃圾回收(GC):Java虚拟机(JVM)是运行Java程序的基础环境,了解JVM的内存管理模型以及垃圾回收机制,对于编写高性能的Java应用至关重要。 6. Java网络编程:Java提供了丰富的网络编程接口,...

    Java架构体系学习线路图

    Java内存模型定义了程序中变量(线程共享变量)的访问规则。 **2. 并发模式** 并发是现代软件开发中不可或缺的一部分。Java提供了多种并发编程模式,如Thread类、Runnable接口、ExecutorService等,掌握这些模式...

    java技术体系及认证

    4. **JVM(Java Virtual Machine)**:Java 虚拟机是Java程序的运行环境,它负责解释执行类文件,并管理内存,确保了Java的跨平台特性。 基于这些组件,Java 分为了三个主要的平台: - **Java SE(Standard ...

    JAVA核心体系知识点.zip

    理解JVM的工作原理,包括内存管理(如堆和栈)、垃圾回收机制以及类加载过程,对于优化Java程序性能和解决内存泄漏等问题至关重要。 接下来,我们关注的是多线程。在Java中,多线程允许程序同时执行多个任务,提高...

    JAVA技术体系图

    - 深入理解Java内存模型,能有效诊断和优化性能问题。 - 掌握分布式系统的设计原则,如CAP定理、服务发现和服务治理。 - 了解消息队列(如RabbitMQ、Kafka)和缓存系统(如Redis、Memcached)。 - 熟悉容器化...

    深入理解Java虚拟机——Java内存区域与内存溢出异常.xmind

    这是自己读《深入理解Java虚拟机》时候用XMind建立的思维导图,目的是为了能够帮助自己整理、梳理相关的知识以及方便自己日后的回顾,帮助自己建立起关于JVM的知识体系,里边也有一些对相关内容的补充,通过备注的...

    java体系笔记

    2. 内存区域:Java内存分为虚拟机栈、本地方法栈、堆、方法区和程序计数器。 三、面向对象编程 1. 封装:隐藏对象的实现细节,提供公共接口供外部访问。 2. 继承:子类继承父类的属性和方法,实现代码重用和扩展。 ...

    Java并发体系.pdf

    本文将深入探讨其中的关键概念,如Java内存模型(JMM)、线程通信机制、内存共享以及相关的同步机制。 首先,Java内存模型(JMM)是理解和解决并发问题的基础。JMM规定了线程如何访问和修改共享数据,以确保多线程...

    Java调试体系及协议

    Java调试体系及协议是开发和优化Java应用程序的关键组成部分。它为开发者提供了深入理解代码执行流程、定位和修复问题的能力。本文将深入探讨Java Platform Debugger Architecture (JPDA),这是Java调试的基础,以及...

    Java异常处理体系

    这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...

    Java核心知识体系.docx

    Java核心知识体系 Java 是当前软件开发行业中最流行的编程语言之一,掌握 Java 的核心知识体系对于开发者来说至关重要。下面是对 Java 核心知识体系的总结和分析。 Java 基础 Java 是基于面向对象编程思想的...

    Java全栈知识体系思维导图 (Java基础、Java高级、web前端、web后端、Oracle数据库、Vue)初学者.zip

    Java全栈知识体系是现代软件开发中的重要概念,它涵盖了从客户端到服务器端的全方位技术栈。本资源“Java全栈知识体系思维导图”旨在为初学者提供一个清晰的学习路径,帮助他们全面掌握Java相关的技术和应用。以下是...

    java中与继承有关的程序内存分析

    Java内存主要分为三个区域:栈(Stack)、堆(Heap)和方法区(Method Area)。在讨论继承时,我们主要关注堆和方法区。 1. **堆内存**:这是Java对象实例化的地方。当创建一个子类对象时,首先会为父类的部分分配...

    基于沙箱的Java安全体系结构

    ### 基于沙箱的Java安全体系结构 #### 概述 Java作为一种跨平台的编程语言,其安全模型的设计尤为关键。Java的安全沙箱机制是确保Java应用程序能够在不损害系统安全的前提下运行的重要保障。本文将详细介绍Java...

Global site tag (gtag.js) - Google Analytics