1、运行时数据区域

  java虚拟机在执行java程序的过程中会将它管理的内存区域分为若干个不同的数据区域。这些区域有各自的服务对象,创建以及销毁时间,有的内存区域随着虚拟机的启动和关闭而创建和销毁,有的内存区域则依赖于用户线程的启动和结束而创建和销毁。

  java虚拟机管理的内存包含以下几个数据区域。如图所示。

1.1、程序计数器

  程序计数器是一块较小的内存区域,它可以看做是当前线程所执行字节码的行号指示器。由于java虚拟机的多线程工作是通过轮流切换线程并且分配处理器执行时间的方式来实现的,在任何时刻,处理器只会处理其中一个线程,所以在多线程轮流切换工作时,需要程序计数器来记住每个线程执行到的位置,这样在切换回当前线程时才能回到正确的位置,同时每个线程的程序计数器应该是互不影响,独立存储,所以程序计数器这部分内存区域是线程私有的。

1.2、虚拟机栈

  和程序计数器一样,虚拟机栈也是线程私有的。java虚拟机栈描述的是java方法执行的内存模型:每个方法执行过程中,会产生一个栈帧,栈帧存放的是局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的调用和执行完毕,对应着栈帧的入栈和出栈过程。

如下图所示:

局部变量表存放了编译期间可知的各种基本数据类型,引用类型和returnAddress类型。其中64为的long和double类型的数据会占用2个局部变量空间slot,其余额数据类型在1个slot。局部变量表所需要的内存空间在编译期间就已经确定了,当进入一个方法时,这个方法在帧中需要分配多大的局部变量空间已经确定的,在方法运行期间不会改变局部变量表的大小。

在java虚拟机规范中,规定了该区域会出现的两种异常:StackOverFlowError,如果线程请求的内存空间大于虚拟机所允许的内存大小,会抛出此异常;OutOfMemeoryError,如果虚拟机申请不到足够的内存是,就会抛出这个异常。

1.3、本地方法栈

  本地方法栈和虚拟栈很类型,区别就是虚拟机栈是为java方法服务的,而本地方法栈为Native方法服务的。

1.4、Java堆

  java对是虚拟机内存区域中最大的一块内存。java堆的目的是用来存放对象的。java堆也是垃圾收集器回收的主要区域。java堆可以处于物理上不连续的内存空间。如果在堆中没有内存完成对象的分配,并且堆也无法扩展时,会抛出OutOfMemeoryError。

1.5、方法区

  方法区和java堆一样,是线程共有的。它用于存储已被虚拟机加载的类信息、常量、静态变量和编译后的代码等信息。方法区是java堆的一部分。当方法区无法满足内存分配需求时,会抛出OutOfMemeoryError。

Java内存区域的更多相关文章

  1. 【转】Java内存管理:深入Java内存区域

    转自:http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一 ...

  2. Java 内存区域和GC机制分析

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  3. Java虚拟机2:Java内存区域及对象

    几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻 ...

  4. Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  5. Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  6. Java 内存区域划分

            JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...

  7. Java内存管理:深入Java内存区域

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝 ...

  8. 2016021801 - Java内存区域学习笔记

    根据<深入理解java虚拟机>学习归纳整理学习笔记 程序计数器 用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员:当前线程表示当前机场, 所执行的字节码等同于被等 ...

  9. Java 内存区域和GC机制--备用

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 ...

  10. JAVA内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

随机推荐

  1. 1、MVC和EF中的 Model First 和 Code First

    准备:先引入MVC和EF的dll包 *命令方法:打开工具——库程序包管理器——程序包管理器控制台,选择自己的项目 a)     Install-Package EntityFramework -Ver ...

  2. PHP中CURL方法curl_setopt()函数的一些参数

    bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,v ...

  3. 黑马程序员:Java编程_IO流

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设 ...

  4. .htaccess详解及.htaccess参数说明【转】

    目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...

  5. pdf生成器

    apose, http://www.codeproject.com/Articles/570682/PDF-File-Writer-Csharp-Class-Library-Version

  6. LPTHW 结束了

    基本上在学习了LPTHW的 类 继承 和 合成以后基本就结束. 后面几章都是根据web.py进行网页编程,以及自动化测试的.目前来看不太感兴趣. 稍后我可能找个实际项目进行锻炼下,比如 Crossin ...

  7. Python 基礎 - 淺copy補充說明

    在 import copy 這個模塊裡 基於第一個列表來做淺copy,實際上第二個列表裡的元素,是第一個列表的 引用. 接下來介紹 淺copy有三種方式可以使用 #!/usr/bin/env pyth ...

  8. LintCode Palindrome Partitioning II

    Given a string s, cut s into some substrings such that every substring is a palindrome. Return the m ...

  9. 2.4G无线射频通信模块nRF24L01+开发笔记(基于MSP430RF6989与STM32f0308)(1.(2)有错误,详见更正)

    根据网上的nRF24L01+例程和TI提供的MSP430RF6989的硬件SPI总线例程编写程序,对硬件MSP-EXP430RF6989 Launch Pad+nRF24L01P射频模块(淘宝购买)进 ...

  10. 实现TCP、UDP相互通信及应用

    实验名称  Socket编程综合实验(1) 一.实验目的: 1.理解进程通信的原理及通信过程 2.掌握基于TCP和UDP的工作原理 3.掌握基本的Socket网络编程原理及方法 二.实验内容 1.掌握 ...