`
dannyhz
  • 浏览: 392903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

jvm内存模型

 
阅读更多
http://www.cnblogs.com/dingyingsi/p/3760447.html

4、Java 堆

对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的

一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的

唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java 虚

拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配①,但是随着JIT 编译器

的发展与逃逸分析技术的逐渐成熟,栈上分配、标量替换②优化技术将会导致一些微妙

的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。

Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”(Garbage

Collected Heap,幸好国内没翻译成“垃圾堆”)。如果从内存回收的角度看,由于现在

收集器基本都是采用的分代收集算法,所以Java 堆中还可以细分为:新生代和老年代;

再细致一点的有Eden 空间、From Survivor 空间、To Survivor 空间等。如果从内存分配

的角度看,线程共享的Java 堆中可能划分出多个线程私有的分配缓冲区(Thread Local

Allocation Buffer,TLAB)。不过,无论如何划分,都与存放内容无关,无论哪个区域,

存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配

内存。在本章中,我们仅仅针对内存区域的作用进行讨论,Java 堆中的上述各个区域的

分配和回收等细节将会是下一章的主题。

根据Java 虚拟机规范的规定,Java 堆可以处于物理上不连续的内存空间中,只要

逻辑上是连续的即可,就像我们的磁盘空间一样。在实现时,既可以实现成固定大小

的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过-Xmx

和-Xms 控制)。如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出

OutOfMemoryError 异常。

4、方法区

方法区(Method Area)与Java 堆一样,是各个线程共享的内存区域,它用于存

储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽

然Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-

Heap(非堆),目的应该是与Java 堆区分开来。

对于习惯在HotSpot 虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区

称为“永久代”(Permanent Generation),本质上两者并不等价,仅仅是因为HotSpot 虚

拟机的设计团队选择把GC 分代收集扩展至方法区,或者说使用永久代来实现方法区而

已。对于其他虚拟机(如BEA JRockit、IBM J9 等)来说是不存在永久代的概念的。即

使是HotSpot 虚拟机本身,根据官方发布的路线图信息,现在也有放弃永久代并“搬家”

至Native Memory 来实现方法区的规划了。

Java 虚拟机规范对这个区域的限制非常宽松,除了和Java 堆一样不需要连续的内

存和可以选择固定大小或者可扩展外,还可以选择不实现垃圾收集。相对而言,垃圾

收集行为在这个区域是比较少出现的,但并非数据进入了方法区就如永久代的名字一

样“永久”存在了。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸

载,一般来说这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件

相当苛刻,但是这部分区域的回收确实是有必要的。在Sun 公司的BUG 列表中,曾出

现过的若干个严重的BUG 就是由于低版本的HotSpot 虚拟机对此区域未完全回收而导

致内存泄漏。

根据Java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出

OutOfMemoryError 异常。
分享到:
评论

相关推荐

    JVM内存模型

    JVM内存模型详解 JVM内存模型是Java虚拟机(JVM)中的一种内存管理机制,它将内存区分为永久区内存(Permanent space)和堆内存(heap space)两大块。永久区内存用于存放加载的Class类级对象,如class本身、method...

    JVM内存模型深度剖析与优化.pdf

    JVM内存模型深度剖析与优化 JVM内存模型是Java虚拟机的核心组件之一,它直接影响着Java应用程序的性能和可靠性。本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一...

    jvm内存模型.pdf

    jvm内存模型.pdf

    JVM内存模型详解

    jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。

    三问JMM--有关JVM内存模型的PPT

    ### 三问JMM——有关JVM内存模型的深度解析 #### 前言 近期,在诚信通开源研究小组的专题学习分享会上,我们针对Java内存模型(JMM)进行了深入探讨,现将JMM相关的一些核心概念进行梳理,以便更好地理解和把握JMM的...

    JVM内存模型以及垃圾回收相关资料

    JVM内存模型与垃圾回收是Java性能优化的关键部分。JVM(Java Virtual Machine)内存模型分为多个区域,包括新生代(New Generation)、老年代(Old Generation)和永久代(Permanent Generation)。新生代又细分为...

    深入详解JVM内存模型与JVM参数详细配置.pdf

    "深入详解JVM内存模型与JVM参数详细配置" 本资源详细介绍了JVM内存模型的结构和组成部分,包括堆内存、方法区、栈内存、程序计数器等。同时,还详细介绍了JVM参数的配置和调整方法,以提高JVM的性能和效率。 ...

    JVM内存模型及分区 JVM内存模型及分区

    理解JVM内存模型对于优化Java程序性能至关重要,合理分配和管理内存能有效避免内存泄漏和性能瓶颈。例如,通过调整堆大小、设置合理的垃圾回收策略,可以优化应用的运行效率。此外,了解这些内存区域的工作原理也能...

    Java 虚拟机JVM内存模型

    ### Java 虚拟机JVM内存模型知识点 #### 1. JVM概述 ##### 1.1 Java的特性与JVM的应用 Java语言的特性包括跨平台性、面向对象、安全性等。JVM是Java程序能够跨平台运行的关键,它负责将Java源代码转换成与平台无关...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...

    java jvm内存模型

    "Java JVM内存模型" Java虚拟机(JVM)内存模型是Java虚拟机的核心组件之一,它定义了Java程序在运行时的内存布局和管理方式。JVM内存模型主要分为五个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。 1. ...

    JVM内存模型和性能优化.docx

    JVM内存模型内置了基于内存的并发模型,支持多线程机制,提供了同步锁(Synchronization)功能,使得在多线程环境下能够确保数据一致性。此外,JVM还提供了大量的线程安全的库包,这些特性使得开发者可以灵活控制...

    java毕业设计-JVM内存模型和垃圾收集PPT37页-JVM内存模型和垃圾收集

    jvm--java毕业设计-JVM内存模型和垃圾收集PPT37页--JVM内存模型和垃圾收集

    02-VIP-JVM内存模型深度剖析(1)1

    总结来说,理解JVM内存模型和参数设置对于优化Java应用程序性能至关重要。正确配置JVM参数可以防止内存溢出,降低垃圾回收频率,提升系统响应速度。同时,逃逸分析等优化技术也是提高程序执行效率的有效手段。在实际...

    jvm内存模型.doc

    jvm内存模型

    JVM内存模型(通俗易懂)

    JVM内存模型则是理解Java程序性能优化的关键,因为它规定了程序中的数据如何在内存中分配和访问。本文将深入浅出地探讨JVM内存模型,帮助你快速掌握这一核心概念。 首先,我们要知道JVM内存模型主要分为以下几个...

Global site tag (gtag.js) - Google Analytics