Java自动内存管理机制
1、运行时数据区域划分

2、程序计数器
作用:可以看做是当前线程所执行的字节码的行号指示器。
解释:字节码指示器就是通过改变程序计数器的值来指定下一条需要执行的指令。分支,循环等 基础功能就是依赖程序计数器来完成的。
说明:由于java虚拟机的多线程是通过轮流切换并分配处理器执行时间来完成,一个处理器同一时间 只会执行一条线程中的指令。为了线程恢复后能够恢复正确的执行位置,每条线程都需要一个 独立的程序计数器,以确保线程之间互不影响。所以程序计数器是“线程私有”的内存。
注明:程序计数器区域是Java虚拟机中唯一没有定义OutOfMemory异常的区域
3、Java虚拟机栈
作用:虚拟机栈描述的是Java方法执行的内存模型
说明:每个方法被执行的时候都会创建一个栈帧 用于存储局部变量表,操作栈,动态链接, 方法出口等信息。每一个方法被调用的过程 就对应一个栈帧在虚拟机栈中从入栈到出 栈的过程。
异常:(1) 线程请求的栈深度大于虚拟机允许的栈深度, 将抛出StackOverflowError。
(2)虚拟机栈空间可以动态扩展,当动态扩展是无 法申请到足够的空间时,抛出OutOfMemory异常。
注明:Java虚拟机栈也是线程私有的,生命周期与线程相同

4、Java本地方法栈
说明:本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的, 而本地方法栈则是为执行本地方法(Native Method)服务的。在JVM规范中,并没有对本地 方发展的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。 在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一
注明:本地方法栈中也会抛出StackOverflowError和OutOfMemory异常。
5、Java堆
作用:Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
说明:在 Java 中,堆被划分成两个不同的区域:
(1)新生代 ( Young )。 新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor
(2)老年代 ( Old )。
目的:这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 注明:各个线程共享的内存区域
6、方法区、运行时常量池、直接内存
(1)方法区也是线程共享的区域,用于存储已经被虚拟机加载的类信息,常量,静态变量
(2)运行时常量池也是方法区的一部分。
(3)直接内存并不是虚拟机运行时数据区的一部分,也不是Java迅疾规范中定义的内存区域。 注明:方法区、直接内存无法满足内存分配需求时将抛出OutOfMemoryError异常。
Java自动内存管理机制的更多相关文章
- Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...
- Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
- JVM自动内存管理机制——Java内存区域(下)
一.虚拟机参数配置 在上一篇<Java自动内存管理机制——Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a) ...
- JVM自动内存管理机制--读这篇就GO了
之前看过JVM的相关知识,当时没有留下任何学习成果物,有些遗憾.这次重新复习了下,并通过博客来做下笔记(只能记录一部分,因为写博客真的很花时间),也给其他同行一些知识分享. Java自动内存管理机制包 ...
- JVM自动内存管理机制——Java内存区域(上)
一.JVM运行时数据区域概述 Java相比较于C/C++的一个特点就是,在虚拟机自动内存管理机制的帮助下,我们不需要为每一个操作都写像C/C++一样的delete/free代码,所以也不容易出现内存泄 ...
- 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- 【深入理解Java虚拟机】自动内存管理机制——内存区域划分
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- 2.1 自动内存管理机制--Java内存区域与内存溢出异常
自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...
- 深入理解Java虚拟机(自动内存管理机制)
文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...
随机推荐
- mtk GPIO口
http://blog.csdn.net/mcgrady_tracy/article/details/39320691 mt6582多达168个GPIO口,当然这些GPIO口是复用的,注意lk和Lin ...
- python--easygui
1.msgbox import easygui as eg # msgbox # 一般使用三个参数,msg:内容,title:标题,ok_button:按钮内容 eg.msgbox(msg=" ...
- Guess Number Higher or Lower II -- LeetCode
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- 【CodeForces 788B】奇妙的一笔画问题
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61845295 题目大意 给定n个点m条边的无向图 ...
- SSO [ OAuth2.0 ]
1) SSO英文全称Single Sign On,单点登录. SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 它包括可以将这次主要的登录映射到其他应用中用于同一个用户的 ...
- 在mac上运行android的intel模拟器导致的死机问题解决
最近用Mac开发android的时候遇到了一个烦人的问题,装上了HAXM,intel hardware accelerated execution manager以后,一运行android emula ...
- thinkphp3.0增加setInc、setDec方法
thinkphp3.0增加setInc.setDec方法 thinkphp3.0增加setInc.setDec方法,今天查看thinkphp2.0的方法setInc.setDec时是这样写的: 而对于 ...
- 自己写Tiny6410的Bootloader总结!
1.由于Tiny6410 2G版的Nand flash(K9GAG08U0E)的页大小是8K的,但是s3c6410芯片设置为nand flash启动时先从nand flash复制8K代码到片内内存中去 ...
- jQuery插件开发 总结
一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通过选择器获取的jQue ...
- SQL数据库学习系列之一
数据库知识的重要性不言而喻,以下链接给出了最最基础知识的讲解. 第一讲:SQL 语法 第二讲:SQL SELECT 语句 第三讲:SELECT DISTINCT 语句 第四讲:SQL WHERE 子句 ...