`

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

    博客分类:
  • jvm
 
阅读更多

   记录日常点滴,打卡01

 

    在开发日常里有虚拟机内存管理机制的帮助下,我们往往不太关注new对象时发生的事情,也没有频繁的出现内存泄漏溢出的问题,由虚拟机管理着一切看起来都很美好。不过正因为这样,把一切都交给了虚拟机,一旦出现了此问题又不是很了解虚拟机的内存分配,那么排查起来就会很艰难

 
运行时数据区

 

1.程序计数器:

    一个较小的内存区域,可以看成当前线程执行的字节码的行号指示器,字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成

   如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法(非java),这个计数器值为空。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域

2.java虚拟机栈

  与程序计算器一样,是线程私有的,生命周期也与线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程

虚拟机栈就是常说栈内存和堆内存中的栈内存,或者说是虚拟机栈中局部变量表的部分。

 局部变量表存放了编译期可知的各种基本类型(8大基本类型)、对象引用、和returnAddress(指向了一条字节码指令的地址)

 其中64位长度的long和double类型的数据会占用2个局部变量,其余的类型只占用一个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法是这个方法需要在帧中分配多大局部变量是完全确定的,在方法运行期间不会改不按局部变量表的大小

 在java虚拟机规范中,对这个区域规定了两种异常状况:如果线程请求是栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。

如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常

 

 

后续更新。。。。


 

  • 大小: 345.8 KB
  • 大小: 345.8 KB
分享到:
评论

相关推荐

    Java内存区域与内存溢出异常.pdf

    Java内存区域与内存溢出异常.pdf

    JAVA内存区域与内存溢出异常归类.pdf

    Java内存区域是Java虚拟机(JVM)管理内存的核心组成部分,它们主要分为以下几个部分: 1. **程序计数器(Program...开发者应当关注内存分配、垃圾收集策略以及对象访问方式,以提高程序效率并避免内存溢出异常。

    深入理解Java虚拟机——Java内存区域与内存溢出异常.xmind

    这是自己读《深入理解Java虚拟机》时候用XMind建立的思维导图,目的是为了能够帮助自己整理、梳理相关的知识以及方便自己日后的回顾,帮助自己建立起关于JVM的知识体系,里边也有一些对相关内容的补充,通过备注的...

    JAVA内存溢出问题总结

    JAVA内存溢出问题总结 JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题...

    Java内存区域与内存溢出异常详解

    Java内存区域与内存溢出异常详解 Java内存区域可以分为程序计数器、虚拟机栈、本地方法栈、堆、方法区五个部分。每个部分都有其特定的作用和生命周期。 1. 程序计数器(Program Counter Register):是当前线程所...

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: ...正确理解和运用Java内存机制以及异常处理机制对于开发健壮、高效的Java应用程序至关重要。

    Java内存溢出解决办法

    Java内存溢出问题,全称为Java OutOfMemoryError,是Java开发者经常遇到的运行时异常。内存溢出通常发生在程序运行过程中,系统无法为运行的应用程序分配足够的内存资源,导致程序无法正常执行。理解并解决Java内存...

    kettle内存溢出(Java heap space)以及解决方法.docx

    Java堆是Java虚拟机中最大的一块内存区域,用于存储对象实例。当程序创建新的对象并分配给堆时,如果堆空间不足,就会抛出`OutOfMemoryError: Java heap space`异常。Java应用程序可以通过设置JVM的启动参数来控制堆...

    Java 内存溢出解决办法

    Java内存溢出问题通常指的是程序在试图分配内存时,无法找到足够的连续内存空间而抛出的异常。在Java中,内存分为几个区域:堆(Heap)、栈(Stack)、方法区(Method Area,Java 8后被元空间取代)以及程序计数器和...

    java内存溢出解决方案

    Java内存溢出问题通常指的是Java应用程序在运行过程中由于内存分配不当或使用过度导致JVM无法分配更多的内存,从而抛出`java.lang.OutOfMemoryError`异常。本文将深入探讨Java内存溢出的不同类型及其解决方案。 1. ...

    JVM实战-对象访问与内存溢出异常解析

    在Java虚拟机(JVM)中,不同的内存区域负责不同的功能,并且各自可能会出现特定类型的内存溢出异常。通过本实验,旨在深入理解JVM内存管理机制以及各种内存区域的特点,并通过具体的编程实践来触发并分析这些异常,...

    JVM内存溢出问题解析

    在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候将抛出内存溢出异常信息。Heap Size 最大不要超过可用物理内存的 80%,一般的要将 Xmx 和 Xms 设置相同避免每次 GC 后都要调整虚拟机堆的...

    java内存分配 .pdf

    #### 一、Java内存区域与内存溢出异常 Java虚拟机(JVM)在运行过程中会管理多种不同的内存区域,这些区域各自承担着特定的任务,并且每种区域都有可能发生内存溢出异常。 ##### 1.1 程序计数器(Program Counter ...

    解决Java程序内存溢出的办法

    10. **日志和异常处理**:当发生内存溢出时,JVM会生成堆转储文件(hprof),通过分析这些文件可以找出问题原因。同时,良好的异常处理和日志记录可以帮助追踪问题。 11. **监控与调优**:使用JMX(Java Management...

    Java编程常见内存溢出异常与代码示例

    Java编程常见内存溢出异常与代码示例 在Java编程中,内存溢出异常是非常常见的错误之一,了解内存溢出异常的原因和解决方法是非常重要的。本文将详细介绍Java编程中常见的内存溢出异常和代码示例,帮助读者更好地...

    Java常见内存溢出异常分析与解决

    不同的内存区域可能出现不同的内存溢出异常,如`OutOfMemoryError`。 1. `java.lang.OutOfMemoryError`: 这是最常见的内存溢出异常,可能由于以下几个原因: - JVM内存设置过小:如果分配给JVM的内存不足,当程序...

    java内存泄漏解决

    #### 二、Java内存模型与内存区域 Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)、永久代(Permanent Generation Space)等。不同的内存区域有着不同的作用和特点: ...

    Java内存机制学习和使用

    每一个Java应用程序启动时都会创建一个独立的Java虚拟机(JVM)实例,每个JVM实例都会有自己的Java堆内存区域。 - **内存分配与回收**:当我们在代码中创建一个新的对象时,JVM会在堆内存中为其分配一块内存。当...

    java内存泄露、溢出检查方法和工具.pdf

    Java内存管理和内存问题,特别是内存泄露与内存溢出,是Java开发者必须面对的重要主题。本文主要探讨了Java内存溢出的检查方法和工具,以及内存泄露的基本原理。 首先,当Java应用程序抛出`java.lang....

    浅谈java内存管理与内存溢出异常

    Java内存管理是Java虚拟机(JVM)的关键组成部分,它主要负责对象的创建、分配、...总的来说,理解Java内存管理与内存溢出异常对于优化应用性能、防止系统崩溃至关重要。开发者应关注内存使用,确保程序高效且健壮。

Global site tag (gtag.js) - Google Analytics