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. iOS开发,用了ARC,引入非ARC的第三方,报错

    ARC forbids explicit message sendof'dealloc' 在xcode中,打开“Build Setting”,找到“Objective-C Automatic Refe ...

  2. 每次Xcode 升级之后 插件失效,两步解决

    以下内容来源:http://www.cocoachina.com/bbs/read.php?tid=296269 每次Xcode 升级之后 插件失效,两步解决 1.打开终端,输入以下代码获取到DVTP ...

  3. MFC如何隐藏RibbonBar的QAT QuickAccessToolBar(快速访问工具栏)

    在CMainFrame的中的OnCreate函数中找到 m_wndRibbonBar.LoadFromResource(IDR_RIBBON); 在这一行的下面添加 CMFCRibbonQuickAc ...

  4. bootstrap总结

    bootstrap在reset.css文件中设置margin为0,因此其他的标签需要重新设计margin. 1.h <h>标签和普通使用方法一样. 定义了.h1~.h6六个类名,样式和标题 ...

  5. 用python+selenium抓取豆瓣读书中最受关注图书并按评分排序

    抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评 方法一: #coding=utf-8 ...

  6. CKEditor使用配置方法

    一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...

  7. Android之QQ登录界面

    首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得 ...

  8. 使用VC6开发opengl配置

    2015-11-09 22:25 VC6中工程创建: ​(1)创建一个Win32 Console Application.(以我创建的为例,工程名为simpleGL)   (2)链接OpenGL li ...

  9. 【 D3.js 入门系列 --- 5.1 】 做一个带坐标轴和标签的图表

    前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset=" ...

  10. 备忘DES简单加密与解密

    package com.ego.util; import java.io.IOException; import java.security.SecureRandom; import javax.cr ...