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、虚拟机的前世今生和java内存区域1
这些区域各有各的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。如果线程执行的一个 Java 方
java内存区域和内存溢出.xmind
Java虚拟机Java内存区域及对象.doc
JAVA内存区域与内存溢出异常归类.pdf
这是自己读《深入理解Java虚拟机》时候用XMind建立的思维导图,目的是为了能够帮助自己整理、梳理相关的知识以及方便自己日后的回顾,帮助自己建立起关于JVM的知识体系,里边也有一些对相关内容的补充,通过备注的...
NULL 博文链接:https://xdjava.iteye.com/blog/2031254
Java内存分配与管理是Java的核心技术之一,今天我们深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的...
java 入门、java内存区域和OOM、垃圾回收器和垃圾回收策略
Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作...
虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也就是说在建立一个对象时在堆和栈中都分配内存,在堆中分配的内存实际存放这个被创建的对象的本身,而在栈中分配的内存只是存放...
本篇文章对Java内存区域的使用进行了详细的介绍。需要的朋友参考下
深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)
JAVA 内存管理总结 1. java是如何管理内存的 2. 什么叫java的内存泄露 3. JVM的内存区域组成 4.Java中数据在内存中是如何存储的 5. Java的内存管理实例
本文为java虚拟机内存模型概述,参考了《深入了解java虚拟机》与几篇博客整合而成。
JVM,虚拟机结构,java,内存结构
JVM内存结构Java 代码是要运行在虚拟机上的,而虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。如果
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到...
Java有几种存储区域? java内存分配 Java内存模型 Java内存分配实例解析 String 常量池问题 堆(Heap)和非堆(Non-heap)内存 堆内存分配 非堆内存分配
一、什么叫做java内存区域 1、什么是内存? 在计算机硬件中,内存指的是cpu运算时,用于暂时存放cpu运算过程中的数据的区域,主要负责从固存中提取cpu运算需要的数据并将cpu运算结果如要保存到固定存储中则保存的一...