java内存区域——深入理解JVM读书笔记
本内容由《深入理解java虚拟机》的部分读书笔记整理而成,本读者计划连载。
通过如下图和文字介绍来了解几个运行时数据区的概念。
方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息、常量、静态变量、即时编译器编译的代码等数据。JVM规范对这个区域的限制很宽松,如同堆一样不需要连续的内存、可选择固定大小、可扩展的大小外,还可以选择不实现垃圾收集。因为在些区域的垃圾收集必要性不高且效果较差。如果回收也是常量池的回收和类型的卸载,但此操作异常困难。当方法区无法满足内存的分配时,抛OutOfMemoryError。
java堆:它是VM中所管理的最大的一块线程共享的内存。它唯一的目的就是存放对象。JVM规范中描述为所有对象及数组都要存放于此。但是由于技术的发展也并不绝对。它也是垃圾收集器管理的最主要的区域。可以被分为:新生代和老年代等其划分,这样的目的只是便于划分和回收内存。JVM规范描述为它可以是物理上不连续但逻辑上必须连续的区域。如果堆存无法再扩展时抛OutOfMemoryError。
Java 虚拟机栈:它的生命同期与线程相同,因为它是描述java方法的内存模型,每个方法被执行时都会创建一个栈帧(stack frame)用于存放局部变量表、操作栈、动态链接、方法出口等信息。每个方法从开始执行到执行完成都是一个栈帧在虚拟栈中入栈到出栈的过程。在些区域中有两种异常状况:如果线程请求栈尝试大于虚拟机所允许的深度,将抛出StackOverflowError;如果VM可以动态扩展,当扩展时无法申请到足够的内存时抛OutOfMemoryError。
本地方法栈:它与java虚拟机栈相似,区别是虚拟机栈为虚拟机执行java方法服务,而本地方法栈则是为虚拟机使用到的Native方法服务。虚拟机规范中对该区域中的方法使用的语言、方式、数据结构没有强制规定,具体的虚拟机可以自由实现它,比如 sun HotSpot 直接到本地方法栈和虚拟机栈合二为一。抛出的异常与虚拟机相同。
程序计数器:是一块较小的内存空间,它的作用可看成是当前线程执行的字节码的行号指示器。因为jvm的多线程是通过线程轮流切换并分配 处理器执行时间的方式来实现的,在任一时刻一个处理器只会执行一条线程中的指令。因为为了线程切换后能恢复到正确的执行位置,每个线程都要有一个独立的程序计数器。
java内存区域——深入理解JVM读书笔记的更多相关文章
- 深入理解JVM读书笔记思维导图
为了证明我已经啃完这本书然后买新书不用剁手...脑图画了8个钟,感觉整个人都不好了T_T 脑细胞不知道死了多少... 其实没吃透,估计若干年后要重新翻开来看...
- JVM系列1:Java内存区域
JVM系列主要分享自己都虚拟机的理解,我自学时的知识框架多来源于<深入理解Java虚拟机_JVM高级特性与最佳实践>这本书,感兴趣的朋友可直接去阅读这本书. 本系列暂定有3部分,它们是学习 ...
- 初识java内存区域
目录: 1.运行时数据区域 2.对象的创建 3.对象的内存布局 4.对象的访问定位 一.运行时数据区域 基本的java虚拟机运行时数据区如下图: 下面我们就来逐个认识这几个运行时的数据区域 1.程序计 ...
- 深入理解java虚拟机读书笔记--java内存区域和管理
第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据 ...
- JVM学习笔记(一):Java内存区域
由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 首先Java源代码文件(. ...
- Java内存区域与内存溢出异常——深入理解Java虚拟机 笔记一
Java内存区域 对比与C和C++,Java程序员不需要时时刻刻在意对象的创建和删除过程造成的内存溢出.内存泄露等问题,Java虚拟机很好地帮助我们解决了内存管理的问题,但深入理解Java内存区域,有 ...
- JVM笔记(一) Java内存区域
Java 内存区域 总概 java虚拟机在执行java程序的过程中,会把它管理的内存划分为几个不同的数据区域.每当运行一个java程序时,就会启动一个虚拟机. 具体的区域如图所示: 同时,方法区 与 ...
- 深入理解JAVA虚拟机阅读笔记1——JAVA内存区域
一.Java内存区域 1.程序计数器 线程私有. 当前线程所执行的字节码的行号指示器.由于JAVA是多线程的,因此每个线程都独立的程序计数器. 异常:没有规定任何OutOfMemeryError情况的 ...
- [深入理解JVM虚拟机]第2章-Java内存区域与内存溢出异常
2.0引-Java内存区域中,栈内存和堆内存分别装什么,为什么? 栈:解决程序的运行问题,即程序如何执行,或者说如何处理数据. 堆:解决的是数据存储的问题,即数据怎么放,放在哪儿. 参考链接https ...
随机推荐
- java面试基础题(三)
程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...
- Vue.js组件之间的通信
导语:组件之间的关系不外乎两种, 父子组件和非父子组件,本文将对两类组件之间的通信方式进行详细阐述. 父子组件间的通信 通信方式1(单向绑定): Props down, Events up (建议使用 ...
- js前端实现多图图片上传预览
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- JS监听div的resize事件
原文地址:http://zhangyiheng.com/blog/articles/div_resize.html 需求 开发过程中经常遇到的一个问题就是如何监听一个div的size变化. 比如我用c ...
- win server2012 r2 服务器共享文件夹设置
按照普通的win7 设置共享文件夹,不起作用 于是乎倒腾,百度,总结以下步骤 1.启用guest账号 控制面板->用户账户->管理其他账户->Guest启用 2.设置共享文件夹 添加 ...
- 二叉树问题(区间DP好题)
二叉树问题 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Petya Bulochkin很幸运:他得到了一份在"Macrohard"公司的工作.他想要展现他的才华, ...
- HTML4,HTML5,XHTML 之间有什么区别?
原始日期:2014-10-25 14:12 我来从HTML的历史谈谈他们3者的区别.在HTML的早期发展中,W3C成立之前,很多标准的制定都是在浏览器的开发者们互相讨论的情况下完成的,比如HTML 2 ...
- Oracle数据库ora-01722 错误小记
今天遇到个关联查询的错误,特搜索了下记录下来. 因为做视图查询的表是以前建立的,所以有个字段类型应该只实用于当时.看SQL: select x.参数1 , y.参数2 from t_fac_info ...
- django-xadmin列表页filter关联对象搜索问题
环境:xadmin-for-python3 python3.5.2 django1.9.12 问题描述:Product ProductSku两个实体,ProductSku FK外键关联Product ...
- CSS input type="number"出现上下箭头时解决方案
input type="number"时录入内容不可控制,解决方案是在css中添加//火狐input[type=number] { -moz-appearance:tex ...