- 浏览: 68025 次
- 性别:
- 来自: 杭州
文章分类
最新评论
这是我这周整理的jvm内存管理相关的资料,共同学习
一, JVM 综述
JVM 主要包括两个子系统和两个组件。两个子系统分别是Class Loader 子系统和Execution engine (执行引擎)子系统。两个组件分别是Runtime Data Area 组件和Native interface (本地接口)。
Class Loader 子系统的作用:根据全类名来装在class 的内容到Native Method Area 区域。
Execution engine 子系统的作用:执行class 中的指令。
Native interface :与native library 进行交互,是其他语言交互的接口。
Runtime Data Area 组件:这就是我们常说的JVM 内存了。它主要由五部分构成,分别是:
1 ,Heap (堆):一个Java 虚拟机实例只有一个Heap 。
2 ,Method Area (方法区域):被装载的class 信息存储在Method Area 内存区域中。当虚拟机装载某个类是,它使用classloader 定位到这个类,并把这个类装载到Method Area 。注:Method Area 就是永久存储区(Permanment Space ),它是JVM 的驻留内存。另外被装入此区域的数据是不会被垃圾回收器回收掉的,关闭JVM 时,此区域的内存被回收掉。
3 ,Java Stack (java 的栈)
4 ,Program Counter (程序计数器):总是指向将要被执行的下一条指令的地址
5 ,Native Meghod Stack (本地方法栈)
以上五部分是有Heap 和Native Meghod Area 是被所有线程共享的,而其他三个是以线程为颗粒度的,每个线程都有自己的部分。
二,永久存储区( Permanment Space )和堆空间( The Heap Space )
永久存储区 :就是Method Area 。是jvm 的驻留内存。被装进此区域的数据是不会被垃圾回收器回收的,当关闭jvm 时,释放此区域的内存。如果有些应用是动态生成或者调用某些class ,例如Hibernate 等,这时就有必要设置一个比较大的持久代空间来存放这些类。持久代大小可用 -XX:MaxPermSize= 进行设置。
堆空间( Heap Space ) :是java 对象生死存亡的地方,java 对象的出生,成长和死亡都在这个区域进行。堆空间又根据java 对象的创建和年龄特征分为新生区(Young generation space )和年老区(Old generation space )。
新生区( Young Generation space ) :新生区的作用包括对象的创建和率选出能够进入年老区的对象。新生区又包括伊甸园(Eden space ),幸存者0 区(Survivor 0 space )和幸存者1 区(Survivor 1 space )。
伊甸园( Eden space ) :Java 空间所有的对象都在此产生。创建对象的依据就是永久存储区的元数据。
幸存者 0 区( Survivor 0 space )和幸存者 1 区( Survivor 1 space ): 当伊甸园空间用完时,此时 Java 空间又要创建对象;此时垃圾回收器将对伊甸园区的对象进行回收,将伊甸园区中不被其他对象引用的对象进行销毁,释放空间。同时将伊甸园中没有被销毁的对象移到幸存者 0 区,此时如果幸存者 0 区也没有足够的空间来存放这些对象,那么 jvm 的垃圾回收器将对幸存者 0 区进行垃圾回收处理,将幸存者 0 区幸存下来的对象移动到幸存者 1 区。当幸存者 1 区的空间也满的时候,垃圾回收器将对幸存者 1 区进行垃圾回收,此时从幸存者 0 区复制过来的并且存活的对象复制到年老区( Old Space )。需要注意的是: Survivor 的两个区是对称的,没有先后关系 ,所以同一个 Survivor 区内可能同时存在从 Eden 复制过来的对象,和从前一个 Survivor 区内复制过来的对象,而复制到年老区的对象只有从第一个 Survivor 区复制过来并且存活的对象。 而且,总有一个 Survivor 对象是空的。
年老区: 用来保存从新生区存活下来的对象,这些对象一般是生命周期很长的对象。如果年老区没有足够的空间存放 java 队形,则垃圾回收器将对年老区进行垃圾回收。(如果对象仅仅被一个没有被其他对象引用的对象引用,那么该对象也被归为没有存在的必要,以此类推)。如果到最后养老区,幸存者 1 区,幸存者 0 区和伊甸园区都没有空间的话,则 JVM 会报告“ JVM 堆空间 溢出( java.lang.OutOfMemoryError: Java heap space )”,也即是在堆空间没有空间来创建对象。
通常大家还会遇到另外一种内存溢出错误“永久存储区溢出(java.lang.OutOfMemoryError: Java Permanent Space )”。
发表评论
-
ThreadLocal
2013-12-17 17:43 0sss -
获取对象运行时的spring容器
2013-12-17 17:41 0定义class继承ApplicationContextAwa ... -
Java枚举学习
2013-12-15 16:59 543今天看了一篇枚举的总结,非常好,推荐给大家:http:// ... -
通过top和jstack确定哪些线程耗尽了CPU?这些线程在做什么?
2013-10-18 17:45 9451. 背景 有时,线上集群load会突然飙升,无法响应正 ... -
jvm内存模型分析工具-MAT
2013-09-26 10:29 1318mat是一款jvm内存模型分析工具,是排查jvm内存泄露/溢 ... -
Shallow and retained sizes
2013-09-24 09:26 664Reference from : http://www.y ... -
深入学习jvm调试
2013-09-23 16:28 2796一. 背景 写代码和线上维护时,调试功能是必不可少 ... -
xml特殊字符转义
2013-07-25 20:29 2276今天在启动应用时一直报错,如下: 2013-07-25 2 ... -
java之编码解码
2013-07-02 19:15 0一. 编码解码的概念 谈谈我的理解,计算机保存在内存、文 ... -
JDBC连接数据库的几个步骤
2013-05-23 16:20 1000经典,使用JDBC连接数据库,共五个步骤(曾经作为进入公司 ... -
Spring之FactoryBean
2013-05-22 17:44 1926今天在看代码时,发现这样一段配置: <bean i ... -
类图关系总结
2013-05-20 16:24 423平时类图画的比较少,每次都忘记类图的关系,为了画图“更专业 ... -
JVM自带监控工具介绍
2013-05-02 23:47 0平时系统维护,尽管公司做了一些图形化的系统监控工具,例如d ... -
JVM Crash排查分享 - 爆栈
2013-05-02 16:56 7752一. JVM爆栈 爆栈是JVM Crash的一种案例,意 ... -
使用Collections.sort() 对List 排序
2013-04-28 14:33 1170一、问题 有一次线上系统运行过程中,爆出更新数据库死锁的 ... -
maven插件编写
2010-10-25 13:29 487http://somebody-hjh.iteye.com/b ... -
velocity语法备忘
2010-08-16 13:16 881一、基本语法 1、"#"用来 ... -
template设计模式
2010-08-11 23:46 622面向对象系统分析和设计的过程中经常碰到这样一种情况:某一业务逻 ... -
memcached完全剖析(附pdf文档)
2010-05-10 23:11 831原文链接:http://tech.idv2.com/2008/ ... -
配置linux下的Java环境
2010-05-08 23:36 4921、下载linux下的jdk版本j2sdk-1_4_2_07- ...
相关推荐
JVM 内存管理之道 JVM垃圾回收机制 JVM GC组合 JVM 内存监控工具
在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...
### JVM内存管理详解 #### 一、引言 在探讨JVM内存管理之前,我们先来看一下为何要深入了解这一主题。对于深入掌握Java的人来说,内存管理是不可或缺的一部分。随着技术的发展,内存管理变得越来越自动化,但这也...
JVM内存管理是Java平台的一个重要特性,其内存空间的分配和回收机制对Java应用程序的性能和稳定性有着至关重要的影响。 首先,JVM内存管理涉及的内存空间主要分为方法区(Method Area)、堆(Heap)、本地方法栈...
**JVM内存管理及调优** Java虚拟机(JVM)是Java程序运行的基础,它为Java应用程序提供了运行环境。JVM内存管理是优化Java应用性能的关键环节,涉及到内存分配、垃圾回收以及内存溢出等问题。毕玄,一位在淘宝有着...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
JVM内存管理
理解JVM内存管理和垃圾回收机制对于优化Java应用的性能至关重要。开发者可以根据应用的需求和特点,通过调整JVM参数来选择合适的内存配置和垃圾回收策略。同时,使用如JVisualVM等工具进行实时监控和分析,可以帮助...
总的来说,JVM内存管理、调优与监控是一项综合性的技术工作,需要对JVM内部机制有深入理解,并结合具体应用场景进行细致的分析和实践。由于JVM的实现可能存在差异,且规范与实现之间存在一定的不一致性,因此,进行...
理解JVM内存管理和垃圾回收机制对于优化Java应用程序性能至关重要,开发者可以通过调整JVM参数来定制适合应用需求的内存配置和垃圾回收策略。例如,设置新生代和老年代的大小、选择合适的垃圾回收器、设定最大暂停...
在《JVM内存管理白皮书》中,深入探讨了JVM如何处理内存分配、垃圾收集以及各种收集器的工作原理。以下是对该白皮书部分内容的详细解读: 1. 显式与自动内存管理: 在传统的C++等语言中,程序员需要手动进行内存...
理解JVM内存管理和静态成员的工作原理对于优化Java程序的性能至关重要。合理的对象创建、内存使用以及静态成员的恰当运用,都可以帮助提升程序效率并降低内存消耗。在编写代码时,应根据实际需求选择静态或非静态...
JVM 内存管理面试常见问题全解 JVM 内存管理是 Java 程序员必须掌握的重要知识点,本文将对 JVM 内存管理的面试常见问题进行全解。 一、什么是 JVM Java Virtual Machine(Java 虚拟机)是 Java 程序实现跨平台的...
Java虚拟机(JVM)内存管理和垃圾回收是Java编程中至关重要的概念,它涉及到...总之,JVM内存管理和垃圾回收是优化Java应用性能的关键。了解这些概念并正确配置JVM参数,可以帮助开发者创建更高效、更稳定的软件系统。
JVM内存管理知识思维导图.png
### JVM内存管理与GC模型详解 #### 一、引言 在现代软件开发中,Java虚拟机(JVM)作为一种广泛使用的平台,其内部机制尤其是内存管理和垃圾收集(GC)模型,对提升程序性能和稳定性至关重要。本文将深入探讨Sun ...
Java虚拟机(JVM)内存管理和...总结来说,JVM内存管理和垃圾回收是一个复杂而精细的过程,涉及多种策略和算法,旨在高效利用内存,减少应用暂停时间,并防止内存泄漏。理解和掌握这些原理对优化Java应用性能至关重要。