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. Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)

    实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...

  2. Windows Server 2012 没有远程桌面授权服务器可以提供许可证,远程会话被中断

    今天在登录公司内部的服务器的时候,无法进行远程访问. 弹出错误信息:没有远程桌面授权服务器可以提供许可证,远程会话被中断 经过网上的寻找,原来是server 2012 远程登录只提供120天的使用期限 ...

  3. linux下如何安装webbench

    1.上传webbench,解压 2.make&&make install进行安装 如果报没有man1目录,则要用 mkdir -p /usr/local/man/man1 然后 mak ...

  4. kindeditor本地上传报错,只限初学者

    困扰了我三天的问题,话说百度真的害死人啊,百度上有说路劲错了的,有说包没导的,有说还要改plugins里面的文件的!其实这个都不用动,也有说服务器问题的,还有说缓存的,还有说是ecplise的,反正我 ...

  5. IOS常见异常捕获

    前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的体验.其实Objective-C的异常处理方法和JAVA的雷同,懂JAVA的朋友一看就懂.我为什么要写这篇博 ...

  6. sql语句 decimal(18,0)什么意思

    decimal(18,0)18是定点精度,0是小数位数.decimal(a,b)a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38.b指定小数点右边可以存储的十进制数字的最大个数. ...

  7. final评价Ⅱ

    1.飞天小女警: 礼物挑选这个项目相比之前的发布功能更完善了些,但是整体界面还是不太美观,用户界面上呈现出的选项字不够清晰,使用起来不是很方便,但是增加了猜你喜欢的功能,可以根据用户的浏览记录猜测用户 ...

  8. underscore.extend.js

    /** * 基于underscore的扩展 * @module lib/underscoreExtend */ (function() { // 全局可能用到的变量 var arr = []; var ...

  9. android NDK debug 遇到的问题与解决方法

    最近在研究android  NDK 的eclipse调试,遇到点问题,总结一下: 1.Unknown Application ABI :在application.mk里面添加APP_PLATFORM ...

  10. JTree使用

    package JTree; import java.awt.Component; import javax.swing.Icon; import javax.swing.JTree; import ...