JAVA内存区域与内存溢出异常

一 Java内存区域

Java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,Java虚拟机所管理的内存包含以下几个运行时数据区域。

1.程序计数器

程序计数器是一块比较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作就是通过改变计数器的值来选取下一条执行的指令,分支、循环、异常处理,线程恢复等基础功能都需要依赖计数器去完成。

Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,每条线程都有一个独立的程序计算器,各个线程之间计数器互不影响,独立存储

2.Java虚拟机栈

a.虚拟机栈是线程私有的    b.声明周期与线程一样  c.局部变量表中可以存放各种基础数据类型,对象引用 ,其中 64位长度的long和double类型的数据占两个局部变量空间,其他的占一个,局部变量所需的内存空间在编译期间完成分配。 d.如果线程请求的栈深度大于虚拟机允许的深度,抛出StackOverflowError;如果虚拟机可以动态扩展,扩展时没法申请到足够的内存,抛出OutOfMemoryError.

3.本地方法栈

与虚拟机栈的作用很相似,不过本地方法栈是为Native方法服务,虚拟机栈为执行java方法服务

4.Java堆

a.被所有线程共享 b.在虚拟机启动时创建 c.存放对象实例 d.堆中没有存在完成实例分配,并且堆也无法再扩展,抛出OutOfMemoryEoor

5.方法区

a.被所有线程共享 b.存放编译器编译后的数据,类信息,常量,静态变量  c.可以不实现垃圾收集     d.当方法区无法满足内存分配时抛出OutOfMemoryError

6.常量池

常量池是方法区的一部分,Class文件中除了有类的版本,字段,方法,接口等信息外,还有常量池,用于存在基本类型和对象类型、以文本形式的符号引用。比如:类和接口的全限定名;字段和方法的名称与描述符;,编译时,如果发现对其它类方法的调用或者对其它类字段的引用的话,记录进class文件中的只能是一个文本形式的符号引用,在连接过程中,虚拟机根据这个文本信息去查找对应的方法或字段

java long 内存溢出_JAVA内存区域与内存溢出异常相关推荐

  1. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  2. java 虚拟机内存类_java 虚拟机类加载 及内存结构

    在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从"Hello World &q ...

  3. java避免内存泄露_Java防止非静态内部类内存泄漏

    内存泄漏 一个不会被使用的对象,因为另一个正在使用的对象持有该对象的引用,导致它不能正常被回收,而停留在堆内存中,从而导致内存泄漏. 最坏的情况下,由于大量的内存泄漏,最终导致jvm的内存耗尽,致使程 ...

  4. java的gc策略_Java的GC与内存分配策略

    资料整理来源以及参考: Java的GC机制主要针对于 堆以及方法区 而言,对于程序计数器,虚拟机栈,本地方法栈三个区域是随着线程而生,随线程而灭的,栈中的栈帧随着方法的进入和退出有条不紊的执行出栈和入 ...

  5. java栈的回收_JAVA的堆栈和内存、垃圾回收解说

    1.有关java健壮性特点的真相 很多书上都说java健壮性的特点是因为java使用数组代替了c++的指针:c++最令人头痛的问题就是内存问题,java的健壮性使编程人员不用再考虑内存的问题:这种观点 ...

  6. java 内存 四_java最终化的内存保留问题(4)

    四. 一种代替最终化的选择 在前面一节中的示例还存在一种不确定性可能:JVM并不能保证它在最终化队列中调用对象的终结器的顺序.而来自于所有类(应用程序,库,等等)的终结器都是被同等对待的.因此,一个占 ...

  7. java jar 最大内存大小_Java运行Jar包内存配置的操作

    Java运行Jar包内存配置的操作,内存,大小,空间,最小,这是 Java运行Jar包内存配置的操作 易采站长站,站长之家为您整理了Java运行Jar包内存配置的操作的相关内容. 如下: java - ...

  8. java内存 海子_Java虚拟机:JVM内存模型和volatile详解

    JVM内存模型和volatile详解 Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内 ...

  9. java二维数组 内存分配_java中二维数组内存分配

    区分三种初始化方式: 格式一: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的元素有多少个. //例:int arr[] ...

  10. java double溢出_java – 可以加倍或BigDecimal溢出?

    双重溢出到Infinity和-Infinity,它不会绕过. BigDecimal不会溢出,期间,它只受计算机内存量的限制.见: How to get biggest BigDecimal value ...

最新文章

  1. 联想计算机无线网络设置密码,联想路由器怎么设置密码
  2. VS2017中C++无法将参数1从const char [8] 转换为char[]
  3. Mac VirtualBox 命令行Centos 挂载Mac系统中的文件夹
  4. 分布式缓存之Memcache
  5. centos7重新加载服务的命令_CentOS7 从查看、启动、停止服务说起systemctl
  6. Linux修改时区(tzselect) 【例子:修改时区 为 中国 东8区 的时间】
  7. CSharpGL(53)漫反射辐照度
  8. 基于Socket的文件传输(使用CSocket类)
  9. 【原】linux下tar解压缩问题:time stamp in the future
  10. 5e的训练模式全是英文_四块GPU即可训练BigGAN:「官方版」PyTorch实现出炉
  11. php太平洋时间转成北京时间,太平洋时间和北京时间换算(太平洋时间现在几点)...
  12. 服务器硬盘gpt,硬盘采用GPT分区非常重要
  13. 某个section不想被gc-sections remove
  14. 贪心法和动态规划法的区别
  15. 小程序 Serverless: 解放生产力,驱动研发效能提升 1
  16. 不确定度在线计算_测氡仪校准结果不确定度产生的5个因素
  17. 程序设计我爱你_如何用爱设计
  18. C#编程实现阶乘的两种方法
  19. python %f %e %g
  20. 青岛啤酒与德国啤酒:纯爽背后的渊源与秘密

热门文章

  1. 华为补助武汉员工,最高每日 2000 元;iPhone SE 2 量产或推迟;PowerShell 7.0 发布 | 极客头条...
  2. 高通发布 5G 基带芯片 X60:5nm 制程,2021 年上市
  3. “不会Linux,怎么当程序员?”骨灰级程序员:你的代码正在毁掉你!
  4. TPC-C 中跑赢 Oracle 的 OceanBase,双 11 处理峰值达 6100 万次/秒!
  5. Google Chrome 正在走 Windows 的老路
  6. 著名程序员 Eric S. Raymond :用 SaaS 是一种危险的愚蠢行为
  7. 苹果 5G 掉队?!
  8. GitHub 遭黑客攻击勒索;苹果夸大 iPhone 电池续航时间;全球第二大暗网被摧毁 | 极客头条...
  9. 京东回应 5000 万用户数据泄露;百度向今日头条索赔 9000 万;腾讯全球专利申请量第二 | 极客头条...
  10. 如果 AI 技术可以让你永生,你愿意么?