Java内存区域与各区域OOM
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6534990.html
JVM的组成在上一篇博文已经介绍了,现在我们专门深入Java运行时数据区。

1:程序计数器
当前线程执行的字节码文件的行号指示器,用于线程切换之后恢复上次执行时的位置继续执行。各个线程之间的计数器互不影响,“线程私有”。
这是唯一一个在JVM中没有OOM异常的区域。
2:虚拟机栈
这也是线程私有的,保留了当前线程的方法栈帧:每个方法执行时会创建栈帧,用于存储局部变量、操作数、方法出口等。每个方法从调用到执行完成就对应这一个栈帧在虚拟机栈中入栈到出栈的过程。
这个区域有两种异常:方法栈的深度大于虚拟机所允许的深度就会抛出StackOverflowError异常;栈的大小扩展时如果无法获得足够的内存就会抛出OOM异常。
3:本地方法栈
为本地的Native方法服务,功能与虚拟机栈类似,也会由于深度问题或扩展时内存不够而抛出StackOverflowError或OOM异常。
4:Java堆
被所有线程共享的一片区域,所有对象实例以及数组都在堆上分配内存。可以通过:-Xmx、-Xmx设置堆的大小上下限。我们习惯上把堆划分为新生代和老年代,具体划分在GC机制的博文详述。
当堆的内存不足时,抛出OOM异常。
5:方法区
被各个线程共享,存储被虚拟机加载的类的信息、常量、静态变量等,为了与堆进行区分,又有“非堆”的别名。
由于在HotSpot虚拟机中把GC机制扩展到了方法区,使得垃圾收集器可以像Java堆那样管理这部分内存,故方法区又叫“永久代”。这部分区域的垃圾回收为废弃常量和无用的类。废弃常量:常量池中没有被任何对象引用的常量值。无用的类:无任何对象实例、类加载器已被回收、Class对象没有被引用的类文件。
当方法区内存达到-XX:MaxPermSize上限时抛出OOM异常。
5.1:常量池
存放编译器生成的各种字面量、符号引用。
拓展:直接内存
直接内存是本机的内存,不收Java堆大小的限制。但是当服务器管理员配置虚拟机参数时,如果各个内存区域的总和大于本机物理内存限制,就会出现OOM异常。
Java内存区域与各区域OOM的更多相关文章
- Java内存数据模型
本篇文章带来的是对Java内存数据模型的介绍,这对于我们深入理解Jvm虚拟机工作的原理和Java内存的划分大有裨益,好了,为了让我们理解的更为深刻,我们将会加入图片辅助的方法去理解. 本篇博文的目录: ...
- Java 内存模型 ,一篇就够了!
Java 虚拟机 我们都知道 Java 语言的可以跨平台的,这其中的核心是因为存在 Java 虚拟机这个玩意.虚拟机,顾名思义就是虚拟的机器,这不是真实存在的硬件,但是却可以和不同的底层平台进行交 ...
- Java内存模型与内存结构
Java内存模型 一.简介 Java内存模型(JMM)主要是为了规定线程和内存之间的一些关系:根据JMM的设计,系统存在一个主内存(Main Memory)和工作内存(Work Memory),Jav ...
- Java 内存模型与内存结构
Java内存模型 一.简介 Java内存模型(JMM)主要是为了规定线程和内存之间的一些关系:根据JMM的设计,系统存在一个主内存(Main Memory)和工作内存(Work Memory),Jav ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
- JVM内存管理:深入Java内存区域与OOM
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝 ...
- Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- 《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常
2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任 ...
- Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...
随机推荐
- 黑吃黑第一季/全集Banshee迅雷下载
第一季 Banshee Season 1 (2013)看点:“Banshee”在爱尔兰盖尔语中被称为“bean sidhe”,意思是“拥有超能力的女人”.不过在鲍尔的新剧中,Banshee并不是指超自 ...
- nginx 代理ssh
events { worker_connections 1024; } stream { #stream模块,就跟http模块一样 upstream ssh { server 127.0.0.1:22 ...
- .Net Core配置文件读取整理
一 .配置文件说明 1.配置,主要是 指在程序中使用的一些特殊参数,并且大多数 仅在程序启动的之后指定不需要修改. 2.在以前.Net项目中配置文件主要指app.config或web.config,但 ...
- Java(C#)基础差异-语法
1.long类型 Java long类型,若赋值大于int型的最大值,或小于int型的最小值,则需要在数字后加L或者l,表示该数值为长整数,如long num=2147483650L. 举例如下: p ...
- Caffe的solver参数介绍
版权声明:转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/59109447 1. Parameters solver.p ...
- 【翻译自mos文章】Windows平台下的 Oraagent Memory Leak
来源于: Oraagent Memory Leak (文档 ID 1956840.1) APPLIES TO: Oracle Database - Enterprise Edition - Versi ...
- ubuntu 安装 android studio
总共分三个步骤: 安装JDK 这里引用下别人的安装过程http://blog.csdn.net/bhq2010/article/details/6839762 注:android studio 版本为 ...
- AltiumDesigner PCB布局布线过程与技巧
首先是原理图设计. 原理图设计是前期准备工作,对简单的板子,如果熟练流程,不妨可以跳过.但是对于初学者一定要按流程来,这样一方面可以养成良好的习惯,另一方面对复杂的电路也只有这样才能避免出错.在画原理 ...
- Hadoop家族学习路线、实践案例
作者:Han Hsiao链接:https://www.zhihu.com/question/19795366/answer/24524910来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- 【架构】技术-工具-平台-语言&框架
技术-工具-平台-语言&框架 Techniques | Technology Radar | ThoughtWorks