根据《深入理解java虚拟机》学习归纳整理学习笔记

  

  程序计数器

  用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员;当前线程表示当前机场,

     所执行的字节码等同于被等待允许降落的飞机,行号指示器好比下达允许降落指令的空管员)

  线程私有(每个机场都有属于自己的空管员,不同机场的空管员相互独立,互不影响)

  类比:某个机场(线程)负责控制航班降落(被执行的字节码)的空管员(行号指示器);

     每个机场都有属于自己的空管员;

异常:没有.(机场有没有飞机降落,飞机降落过程发生故障,和空管员没有任何关系)

  虚拟机栈

  用途:每个java方法在执行时都会创建一个帧栈,用于存储局部变量表,方法出口等信息。

每个方法从调用到执行完成的过程就对应一个帧栈在虚拟机栈入栈到出栈的过程;

线程私有。

类比:虚拟机栈如同五星级酒店厨房,每个方法则是在酒店厨房内完成的美食。

异常:线程请求的栈深度大于虚拟机栈所允许的深度,会抛出StackOverflowError异常;

     如果虚拟机栈可以动态扩展,如果扩展无法申请到足够的内存,会抛出OutOfMemoryError异常。

  

  局部变量表存放编译时各种基本数据类型,对象引用和返回地址类型。局部变量表所需内存空间在编译时完成分配。

  当进入一个方法时,方法中需要帧栈分配给局部变量表的空间是完全确定的,运行时不会改变局部变量表大小。

  本地方法栈

  用途:本地方法栈为虚拟机使用到的本地方法提供服务;

     虚拟机栈为虚拟机使用到的java方法服务。

线程私有。

  类比:虚拟机栈是五星级酒店(java虚拟机)厨房,本地方法栈是本地酒店(操作系统)的厨房。

  异常:和虚拟机栈异常一样。

  堆(heap)

  用途:所有的对象实例和数组都要在堆上分配;堆是垃圾回收器管理的主要区域。

       (常说的java内存区域分为栈和堆,那么所说的堆就是指这个堆)

  线程共享;

  类比:某个城市的住宅区建设住宅楼;

  异常:如果对中没有内存完成实例分配,并且堆无法再拓展,就会抛出OutOfMemoryError异常!

  方法区

  用途:存储已被虚拟机加载的类的信息、常量、静态变量、即时编译后的代码等数据。

     方法区内存回收主要针对常量池的回收和对类型的卸载;

  线程共享

  异常:方法区无法进行内存分配,会抛出OutOfMemoryError异常。

  运行时常量池,

  存在:运行时常量池是方法区一部分,class文件除了类的版本、字段、方法、接口、还有常量池。

  用途:用于存放编译期和运行时生成的字面量和符号引用。

  异常:当常量池无法申请到内存,会抛出OutOfMemoryError异常。

2016021801 - Java内存区域学习笔记的更多相关文章

  1. <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记

    Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...

  2. Java 内存模型学习笔记

    1.Java类 public class Math { public static final Integer CONSTANT = 666; public int math(){ int a = 1 ...

  3. java 内存模型 ——学习笔记

    一.Java 内存模型 java内存模型把 Java 虚拟机内部划分为线程栈和堆 下面这张图演示了调用栈和本地变量存放在线程栈上,对象存放在堆上.      ==>>  一个局部变量可能是 ...

  4. Java内存模型学习笔记(一)—— 基础

    1.并发编程模型的分类 在并发编程中,我们需要处理两个关键的问题:1.线程间如何通信,2.线程间如何同步.通信是指线程之间以何种机制来交换信息,同步是指程序用于不同线程之间操作发生相对顺序的机制. 在 ...

  5. Java内存模型学习笔记

    Java内存模型(JMM):描述了java程序中各种变量(线程共享变量)的范根规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节.共享变量就是指一个线程中的变量在其他线程中也是可见 ...

  6. 2016021801 - Java内存区域归纳对比

    线程私有 线程共享 程序计数器,虚拟机栈,本地方法栈 堆,方法区 内存区 异常 异常原因 程序计数器 无 虚拟机栈 StackOverflowError 线程请求的栈深度大于虚拟机栈所允许的深度 Ou ...

  7. 《深入理解 Java 虚拟机》学习笔记 -- 内存区域

    <深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有 ...

  8. JVM学习笔记(一):Java内存区域

    由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 首先Java源代码文件(. ...

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

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

随机推荐

  1. Yii2 自动更新时间created_at updated_at

    创建model之后,新建一条记录,结果设计的表中created_at 字段 updated_at 字段 都是datetime 类型的,却不能自动插入当前时间.查看了资料,解决如下: 1.在class ...

  2. IOS开发之——使用Segue在StoryBoard之间切换

    使用Segue能够在ViewController之间来回切换,以下就来说下切换方法: 1. 使用点击button进行切换 直接上图,在须要切换的View属性界面,点击Modal然后拉到前一个view界 ...

  3. HibernateTemplate的find(String querystring)返回值具体解释

    项目源代码中出现例如以下代码: HibernateTemplate ht =-- List<Object[]> tempList = ht.find(String querystring) ...

  4. Spring框架:Spring容器具体解释

    Spring容器 Spring容器能够帮助你管理所有的Bean对象.专业术语称之为IoC控制反转.在传统的程序中.对象的生成都是由开发人员完毕的.而在控制反转中,对象的生成所有都交给框架完毕.这种优点 ...

  5. [Javascript] Linting JavaScript with ESLint

    ESLint is a JavaScript linter (static analysis tool) that offers full support for ES6, JSX, and othe ...

  6. Java经典封装JDBC模板(充分体现面向对象思想)(转)

    程序清单一览 bean类 package com.software.usermanager.bean; public class Users { private String id; private ...

  7. lambda与函数调用的转换

    14.38 编写一个类令其检查某个给定的string对象的长度是否与一个阈值相等.使用该对象编写程序,统计并报告在输入的文件中长度为1的单词有多少个,长度为2的单词有多少个.......长度为10的单 ...

  8. android获取Mac地址和IP地址

    获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信 ...

  9. Node.js + Express + Mongodb 开发搭建个人网站(三)

    三.后台架构 1.在根目录下(和 views 文件夹同级)创建 lib 文件夹 以后所有后端内容 都是在这里写,分别创建三个文件夹 到 lib 目录下: mongo  放的是数据的存储 module  ...

  10. [转]JavaScript 的同源策略

    同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就 ...