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 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...
随机推荐
- MyRecycleView带有上拉加载更多
package com.gan.myrecycleview; import android.content.Context; import android.support.v4.widget.Swip ...
- fork+exec 与system,popen区别
1.fork + exec fork用来创建一个子进程.一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于 ...
- js5秒后自动关闭本页面及5秒钟后自动跳转指定页面的方法
5秒钟后自动关闭 <!DOCTYPE HTML> <html> <head> <title>倒计时自动关闭/跳转页面</title> < ...
- python--控制窗体
窗体的显示和隐藏 #!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import win32con import win32 ...
- 【linux高级程序设计】(第十三章)Linux Socket网络编程基础 3
使用之前的函数实现的简单聊天程序 TCP协议 双方实时发送/接收消息 实现后的问题: 可能是我虚拟机的IP地址配得有问题吧.在一台电脑上面开两个终端,用127.0.0.1的IP收发可以互通.但是两个虚 ...
- 处理下最近的file_id小写问题
update t_resource_info set FILE_ID = UPPER(FILE_ID);update t_resource_my_info set FILE_ID = UPPER(FI ...
- 这绝对是有史以来最详细的web前端学习路线
定要善用开发者工具.firefox的firebug和Chrome的F12都是很好的选择,用好了这个必会发现他带给你的帮助比看一本书更多.你把firebug摸透了你还担心对DOM理解不够?考虑到未来,h ...
- NIO入门之BIO
传统BIO编程 网络编程的基本模型是Client-Server模型,也就是两个进程之间相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的端口发起连接请求,通 ...
- final-第十章
1,nas概念 NAS就是一种直接连接到用户网络中,并具有信息存储功能的硬件设备. NAS是由处理器,文件服务管理模块,和存储部分等组成的. 2,san概念 SAN是一种利用光纤集线器,光纤路由器,光 ...
- iOS开发 Swift开发数独游戏(一)
一.前言 我姥姥是一名退休数学老师,一直很喜欢玩数独游戏.我以前答应过她要给她写一个数独游戏.本来计划是写一个Android应用的,但恰好我学了好长时间iOS开发一直没做什么"大项目&quo ...