第二章:Java内存区域和内存溢出异常

2.2运行时数据区域

运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器

方法区和堆是线程共享的区域

虚拟机栈,本地方法栈,程序计数器是数据隔离的数据区

2.2.,程序计数器,即PC,本质是一块较小的内存区域.可以看做当前线程所执行的字节码的行号指令器

有了它可以实现字节码指令,分支,循环.跳转.异常处理,线程恢复

每个线程有一个单独的PC,各个线程之间不互相影响,独立存储

如果执行的方法是java方法,计数器记录的是正在执行的虚拟机字节码指令的地址

如果是native方法,即不是java语言实现的方法,计数器为空

这是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryException情况的区域

2.2.2java虚拟机栈

Java虚拟机栈也是线程私有的,它的生命周期与线程相同

它描述的是java方法执行的内存模型:每个方法执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,放大出口灯信息.,每个方法从调用到执行完成的过程,就对应着一个栈帧入栈到操作的过程

局部变量表存放了编译器可知的各种基本数据类型(Boolean,byte,char等),对象引用,即reference类型(可能指向一个对象其实地址的引用指针,也可能是指向一个代表对象的句柄或者其他和此对象相关的位置),和returnAddress类型(指向了一个字节码的地址)

StackOverflowError,发生在线程请求的栈深度大于虚拟机所允许的深度的时候

OutOfMemoryError,无法在扩展内存的时候发生

本地方法栈:

跟虚拟机栈的作用一样,不过虚拟机栈运行java方法,而本地方法栈则运行Native服务

本地方法栈中使用的语言,数据结构等没有强制规定,有具体的虚拟机去实现它

Java堆

Java 堆是所有线程共享的一块内存区域,他的唯一作用就是存放实例化的对象,所以他是垃圾收集器的主要作用区域,

Java可以细分为新生代和老年代

更细致的分法”

Eden空间

From survivor空间

To survivor空间

从内存分配的角度还可以分为多个线程私有的分配缓冲区

无论怎么划分都和存放内容无关,存储的都是对象实例,进一步划分的目的是为了更好的回收内存

深入理解java虚拟机读书笔记--java内存区域和管理的更多相关文章

  1. 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象

    一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的 ...

  2. 深入理解java虚拟机读书笔记1--java内存区域

    Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...

  3. 深入理解Java虚拟机读书笔记8----Java内存模型与线程

    八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和J ...

  4. 深入理解Java虚拟机读书笔记 -- Java内存区域

    Graal VM: Run Programs Faster Anywhere. 跨语言全栈虚拟机,可以作为"任何语言"的运行平台使用. Java内存结构 程序计数器:线程私有,较小 ...

  5. 《深入理解java虚拟机》读书笔记1--java内存区域

    Java内存管理 本文主要介绍Java虚拟机运行时的内存区域是如何划分的.Java对象的创建过程.Java对象的内存布局.Java对象的访问定位 一:运行时区域划分 主要可以分为以下 几个: 程序计数 ...

  6. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  7. 深入理解java虚拟机---读书笔记

    第一章 走近java 1. java 技术体系: java 程序设计语言 各种硬件平台上的java虚拟机 class 文件格式 java API 类库 来自商业机构或者开源机构的第三方java类库 j ...

  8. 深入Java虚拟机读书笔记第五章Java虚拟机

    Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...

  9. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

随机推荐

  1. QT5中无法包含Qtgui头文件的问题。

    今天新学QT是,从一个ppt中边看边抄边学.前几页还能理解,但到了用纯源码写空白QT工程时,便遇到了一个问题.头文件里包含 #include  <QtGui> 但是编译时总是出现下面图一中 ...

  2. idea关于tab的设置

    新手使用,一不小心tab显示在右面了,这不学习下给搞正常点. settings===>Editor=====>Editor Tabs; Palacement设置的是tab显示的部位: Ta ...

  3. UVa 11762 Race to 1 (数学期望 + 记忆化搜索)

    题意:给定一个整数 n ,然后你要把它变成 1,变换操作就是随机从小于等于 n 的素数中选一个p,如果这个数是 n 的约数,那么就可以变成 n/p,否则还是本身,问你把它变成 1 的数学期望是多少. ...

  4. 15-BOM

    BOM的介绍 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的 ...

  5. Redis-4.0.11集群配置

    版本:redis-3.0.5 redis-3.2.0  redis-3.2.9  redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial. 集群 ...

  6. SED单行脚本快速参考(Unix 流编辑器)

    ------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...

  7. Hive为什么要分桶

    对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...

  8. Java Application和Java Applet的区别

    Java Applet和Java Application在结构方面的主要区别表现在: (1)运行方式不同.Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通 ...

  9. iOS笔记之UIKit_UITextField

    - (void)viewDidLoad { [super viewDidLoad]; //建立在你已经遵守了<协议UITextFieldDelegate> self.numTF.deleg ...

  10. day05_雷神_函数进阶

    #day05 1.迭代器 1.1可迭代对象 str,list,tuple,dict,set,range,文件句柄 等都是可迭代对象 第一种方法:在该对象中,含有__iter__方法的就是可迭代对象,遵 ...