java内存区域
1。运行时数据区域
1.1 方法区(method area)
是各个线程共享的内存区域。存储已经被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。hotspot虚拟机使用永久代来实现方法区。java虚拟机在这个区的规范:可以选择固定大小或者可扩展,还可以选择不实现垃圾收集。
这个区域的垃圾收集目标主要是针对常量池的回收和对类型的卸载,回收的效果一般,尤其是类型卸载,条件相当苛刻。运行时常量池(runtime constant pool)是方法区的一部分。Class文件包含了类的版本、字段、方法、接口等描述、还有常量池表(constant pool table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池。
1.2 堆(heap)
java堆是虚拟机所管理的内存中最大的一块。也是各个线程共享的内存区域,在虚拟机启动时创建。此区域唯一的目的存放对象实例。java堆是垃圾收集器管理的主要区域。堆空间可分为新生代和老年代,新生代分为,一个Eden和两个Survivor。
1.3 虚拟机栈(vm stack)
虚拟机栈是线程私有的,生命周期和线程相同。vm stack描述的是java方法执行的内存模型:每个方法执行时都会创建见一个栈帧存储局部变量表、操作栈、动态连接、方法出口等信息。局部变量表存放了编译期可知的java8种基本数据类型和reference类型,reference可能是指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或者对象的相关位置和指向一条字节码指令的地址。
如果线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError。当无法申请到足够内存时抛出OutOfMemoryError异常。
1.4 本地方法栈(native method stack)
与虚拟机栈作用类似,本地方法栈则是为虚拟机使用到native方法服务。虚拟机规范中没有对其做强制规定,因此具体的实现也有差异,sun的hotspot将本地方法栈和虚拟机栈和二为一。
1.5 程序计数器(program counter register)
线程私有的。 它的作用可以看做是当前线程的所执行字节码的行号指示器。
分享到:
相关推荐
1. **程序计数器**:这是一个较小的内存区域,存储当前线程执行的字节码的行号指示器,用于确定下一条要执行的指令。 2. **虚拟机栈**:每个线程都有自己的虚拟机栈,当执行方法时,会创建一个栈帧,包含局部变量表...
这些区域各有各的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。如果线程执行的一个 Java 方
1. **Java内存区域** - **程序计数器**:每个线程都有一个独立的程序计数器,用于记录当前线程执行的字节码指令地址。 - **虚拟机栈**:存储方法的局部变量、操作数栈、动态链接等信息,每个方法调用对应一个栈帧...
1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间不足时,会抛出`java.lang.OutOfMemoryError: Java heap space`异常。为了优化内存管理,Java采用了垃圾回收机制(Garbage ...
java内存区域和内存溢出.xmind
Java虚拟机内存区域模型是Java虚拟机管理的内存区域模型,该模型将内存区域分为程序计数器、虚拟机栈、本地方法栈、堆和方法区五个部分。程序计数器是一块较小的内存空间,用于记录当前线程执行的字节码指令地址。...
- **主内存**: 所有线程共享的内存区域,包含堆和方法区,线程间通信的媒介。 - **工作内存**: 每个线程的私有缓存,用于存储从主内存中复制的变量副本,执行计算操作后可能更新回主内存。 2. **内存间交互** - ...
Java内存区域与内存溢出异常.pdf
Java虚拟机(JVM)中有三个主要的内存区域:堆内存(Heap)、栈内存(Stack)和方法区(Method Area)。其中,堆内存是Java对象的主要存储场所,栈内存主要存储方法调用时的局部变量,而方法区则存储类的信息,如类...
Java虚拟机Java内存区域及对象.doc
#### 二、Java内存模型与内存区域 Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)、永久代(Permanent Generation Space)等。不同的内存区域有着不同的作用和特点: ...
### 如何解决Java内存泄漏 #### 1. 背景 Java凭借其垃圾回收机制大大简化了内存管理,使得开发者无需手动管理内存的释放,从而提升了开发效率。然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视...
下面将深入探讨这些内存区域以及相关的垃圾收集和并发收集机制。 1. **堆内存**:Java对象主要存储在堆内存中,它是所有线程共享的一块区域。堆内存由Java虚拟机(JVM)自动管理,通过新生代、老年代和永久代来划分...
每一个Java应用程序启动时都会创建一个独立的Java虚拟机(JVM)实例,每个JVM实例都会有自己的Java堆内存区域。 - **内存分配与回收**:当我们在代码中创建一个新的对象时,JVM会在堆内存中为其分配一块内存。当...
Java内存区域是Java虚拟机(JVM)管理内存的核心组成部分,它们主要分为以下几个部分: 1. **程序计数器(ProgramCounterRegister)**:每个线程都有自己的程序计数器,用于存储当前线程正在执行的字节码的行号指示...
本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...
1. **堆内存**:存储所有对象实例和数组,是Java中最大的内存区域,通过`System.gc()`触发的垃圾收集主要针对这部分内存。 2. **栈内存**:每个线程都有一个独立的栈,用于存储方法调用时的局部变量、方法参数和...
JAVA内存溢出 JAVA中OutOfMemoryError(内存溢出)的三种情况及解决办法 Java中的OutOfMemoryError(内存溢出)是一种常见的错误,本文将详细介绍OutOfMemoryError的三种情况及其解决方法。 首先,我们需要了解...
### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...