第二章: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. 680. Valid Palindrome II

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  2. ios alloc init 和 new 的区别

    1.在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init] 但是并不意味着你不会接触到new,在一些代码中还是会看到[className new], ...

  3. 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)

    传送门 概率dp水题. 题意简述:给你数字表的大小和两个数列,数列中为0的数表示不确定,不为0的表示确定的,求第一个数列字典序比第二个数列大的概率. fif_ifi​表示第i ni~ ni n位第一个 ...

  4. jQuery插件开发全解析[转]

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  5. Codeforces Round #538 (Div. 2) C 数论 + 求b进制后缀零

    https://codeforces.com/contest/1114/problem/C 题意 给你一个数n(<=1e8),要你求出n!在b进制下的后缀零个数(b<=1e12) 题解 a ...

  6. python科学计算模块NumPy

    NumPy是Numerical Python的简称,是高性能科学计算和数据分析的基础包.其实NumPy 本身并并没有提供太多的高级的数据分析功能, 但是理解NumPy数组以及面向数组的计算将有利于你更 ...

  7. js格式化文件大小, 输出成带单位的字符串工具

    /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar formatSize( size ) => String * @grammar ...

  8. WebLogic 11gR1修改jdk版本

    WebLogic 11gR1默认是支持jdk1.6的 我们可以进入到E:\weblogic\user_projects\domains\base_domain\bin中的修改setDomainEnv. ...

  9. java -help

    Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args... ...

  10. spring之hello(简单环境配置)

    导入java包 配置springmvc.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans ...