2016021801 - Java内存区域学习笔记
根据《深入理解java虚拟机》学习归纳整理学习笔记

程序计数器
用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员;当前线程表示当前机场,
所执行的字节码等同于被等待允许降落的飞机,行号指示器好比下达允许降落指令的空管员)
线程私有(每个机场都有属于自己的空管员,不同机场的空管员相互独立,互不影响)
类比:某个机场(线程)负责控制航班降落(被执行的字节码)的空管员(行号指示器);
每个机场都有属于自己的空管员;
异常:没有.(机场有没有飞机降落,飞机降落过程发生故障,和空管员没有任何关系)
虚拟机栈
用途:每个java方法在执行时都会创建一个帧栈,用于存储局部变量表,方法出口等信息。
每个方法从调用到执行完成的过程就对应一个帧栈在虚拟机栈入栈到出栈的过程;
线程私有。
类比:虚拟机栈如同五星级酒店厨房,每个方法则是在酒店厨房内完成的美食。
异常:线程请求的栈深度大于虚拟机栈所允许的深度,会抛出StackOverflowError异常;
如果虚拟机栈可以动态扩展,如果扩展无法申请到足够的内存,会抛出OutOfMemoryError异常。
局部变量表存放编译时各种基本数据类型,对象引用和返回地址类型。局部变量表所需内存空间在编译时完成分配。
当进入一个方法时,方法中需要帧栈分配给局部变量表的空间是完全确定的,运行时不会改变局部变量表大小。
本地方法栈
用途:本地方法栈为虚拟机使用到的本地方法提供服务;
虚拟机栈为虚拟机使用到的java方法服务。
线程私有。
类比:虚拟机栈是五星级酒店(java虚拟机)厨房,本地方法栈是本地酒店(操作系统)的厨房。
异常:和虚拟机栈异常一样。
堆(heap)
用途:所有的对象实例和数组都要在堆上分配;堆是垃圾回收器管理的主要区域。
(常说的java内存区域分为栈和堆,那么所说的堆就是指这个堆)
线程共享;
类比:某个城市的住宅区建设住宅楼;
异常:如果对中没有内存完成实例分配,并且堆无法再拓展,就会抛出OutOfMemoryError异常!
方法区
用途:存储已被虚拟机加载的类的信息、常量、静态变量、即时编译后的代码等数据。
方法区内存回收主要针对常量池的回收和对类型的卸载;
线程共享
异常:方法区无法进行内存分配,会抛出OutOfMemoryError异常。
运行时常量池,
存在:运行时常量池是方法区一部分,class文件除了类的版本、字段、方法、接口、还有常量池。
用途:用于存放编译期和运行时生成的字面量和符号引用。
异常:当常量池无法申请到内存,会抛出OutOfMemoryError异常。
2016021801 - Java内存区域学习笔记的更多相关文章
- <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...
- Java 内存模型学习笔记
1.Java类 public class Math { public static final Integer CONSTANT = 666; public int math(){ int a = 1 ...
- java 内存模型 ——学习笔记
一.Java 内存模型 java内存模型把 Java 虚拟机内部划分为线程栈和堆 下面这张图演示了调用栈和本地变量存放在线程栈上,对象存放在堆上. ==>> 一个局部变量可能是 ...
- Java内存模型学习笔记(一)—— 基础
1.并发编程模型的分类 在并发编程中,我们需要处理两个关键的问题:1.线程间如何通信,2.线程间如何同步.通信是指线程之间以何种机制来交换信息,同步是指程序用于不同线程之间操作发生相对顺序的机制. 在 ...
- Java内存模型学习笔记
Java内存模型(JMM):描述了java程序中各种变量(线程共享变量)的范根规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节.共享变量就是指一个线程中的变量在其他线程中也是可见 ...
- 2016021801 - Java内存区域归纳对比
线程私有 线程共享 程序计数器,虚拟机栈,本地方法栈 堆,方法区 内存区 异常 异常原因 程序计数器 无 虚拟机栈 StackOverflowError 线程请求的栈深度大于虚拟机栈所允许的深度 Ou ...
- 《深入理解 Java 虚拟机》学习笔记 -- 内存区域
<深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有 ...
- JVM学习笔记(一):Java内存区域
由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 首先Java源代码文件(. ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
随机推荐
- Intent是什么?
一.理解Intent: 在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”.而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的And ...
- IO 流—>>>补充
流操作规律: 示例:1. 源: 键盘录入 目的: 控制台 2.源:文件 目的:控制台 3.源: 键盘录入 目的: 文件 基本规律: 面对流对象很多,不知道用哪一个的时候: 通过两个明确来完成 1.明确 ...
- Java-工厂设计模式
引言: 工厂设计模式分为三种: 简单工厂 工厂方法 抽象工厂 联想四种情况 (1).还没有工厂时代:假如还没有工业革命,如果一个客户要一件产品,一般的做法是客户去创建一件产品,然后拿来用. (2).简 ...
- 【转】maven 项目出现 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
http://blessht.iteye.com/blog/1104450 http://www.cnblogs.com/zhouyalei/archive/2011/11/30/2268606.ht ...
- Eclipse中修改SVN用户名和密码方法[转]
由于在svn 的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案: 在Eclipse 使用SVN 的过程中大多数人往往习惯把访问SVN 的用 ...
- Makefile详解--隐含规则
Makefile详解--隐含规则(转) Makefile系列文章,这里有个前辈连续洗了一个系列来介绍,共有26篇博客文章. http://www.cppblog.com/ivenher/archive ...
- 错误ERROR datanode.DataNode (DataXceiver.java:run(278)) - hadoop07:50010DataXceiver error processing unknown operation src:127.0.0.136479 dst:127.0.0.150010
原因: Ambari 每分钟会向datanode发送"ping"连接一下去确保datanode是正常工作的.否则它会触发alert.但是datanode并没有处理空内容的逻辑,所以 ...
- ATL 工程下添加右击菜单
首先在dllmain.cpp中添加如下声明 HINSTANCE g_hInstance; g_hInstance = hInstance; 源码如下: CPoint point; ::GetCur ...
- python学习笔记--Django入门一 网页显示时间
我的笔记是学习http://djangobook.py3k.cn/ 课程时做的,这个上边的文章讲的确实是非常的详细,非常感谢你们提供的知识. 上一篇随笔中已经配置好了Django环境,现在继续跟随ht ...
- 让iOS开发变得更有效率-分类、工具类
在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可.下载地址:https://github.com/lee ...