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 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...
随机推荐
- Python-mysql索引
MySQL索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询 ...
- springMVC 配置中易犯的小错误
搭建springMVC环境时有可能遇到:'警告: No mapping found for HTTP request with URI [/WEB-INF/pages/helloWorld.jsp] ...
- 来杯咖啡-装饰者模式(Decorator)
前言 上篇[观察者模式]发布已经近一个月了,个人感觉反应并不太理想,因为大家响应都不是很积极,不知是文章那里写得有问题,而且也没有人提出过有价值的改进建议,多少感觉有些失望L!因为工作繁忙,所以不可能 ...
- vue.js 2的表单控件
静下心,抄一段sample,以后可以快点到这里来抄...: <!DOCTYPE html> <html> <head> <meta charset=" ...
- Java IO 学习(六)Java的Direct Memory与IO
ByteBuffer的源码中有这样一段注释: A byte buffer is either direct or non-direct. Given a direct byte buffer, the ...
- Tarjan缩点【p4819】[中山市选]杀人游戏
Description 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在\(N\)个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀 ...
- sort equal 确保记录按照 input顺序来
Usually you have a requirement of removing the duplicate records from a file using SORT with the opt ...
- NOIP2016_day1_No1玩具谜题
#include <iostream> #include <cstdio> using namespace std; int main () { freopen("t ...
- java.util.Arrays导入报错问题
我的原因:项目jdk的路径没有找到引起的 解决办法:右击项目->Properties->Java build path->Libraries 下错误的jdk,remove,addLi ...
- Android Developer -- Bluetooth篇 开发实例之三 管理连接
Managing a Connection When you have successfully connected two (or more) devices, each one will have ...