关闭

图解JVM在内存中申请对象及垃圾回收流程

436人阅读 评论(0) 收藏 举报
分类:

/

*  转载请注明作者longdick    http://longdick.iteye.com

*

*/

 

先看一下JVM的内存模型:

 



 

从大的方面来讲,JVM的内存模型分为两大块:

 

永久区内存( Permanent space )和堆内存(heap space)。

 

栈内存(stack space)一般都不归在JVM内存模型中,因为栈内存属于线程级别。

每个线程都有个独立的栈内存空间。

 

Permanent space里存放加载的Class类级对象如class本身,method,field等等。

heap space主要存放对象实例和数组。

heap space由Old Generation和New Generation组成,Old Generation存放生命周期长久的实例对象,而新的对象实例一般放在New Generation。

New Generation还可以再分为Eden区(圣经中的伊甸园)、和Survivor区,新的对象实例总是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,可以向Old区转移活动的对象实例。

 

下图是JVM在内存空间(堆空间)中申请新对象过程的活动图(点击看大图): 

没错,我们常见的OOM(out of memory)内存溢出异常,就是堆内存空间不足以存放新对象实例时导致。

 

永久区内存溢出相对少见,一般是由于需要加载海量的Class数据,超过了非堆内存的容量导致。通常出现在Web应用刚刚启动时,因此Web应用推荐使用预加载机制,方便在部署时就发现并解决该问题。

 

栈内存也会溢出,但是更加少见。

 

堆内存优化:

调整JVM启动参数-Xms  -Xmx   -XX:newSize -XX:MaxNewSize,如调整初始堆内存和最大对内存 -Xms256M -Xmx512M。 或者调整初始New Generation的初始内存和最大内存 -XX:newSize=128M -XX:MaxNewSize=128M。

 

永久区内存优化:

调整PermSize参数   如  -XX:PermSize=256-XX:MaxPermSize=512M

 

栈内存优化:

调整每个线程的栈内存容量  如  -Xss2048K

 

 

最终,一个运行中的JVM所占的内存= 堆内存  +  永久区内存  +  所有线程所占的栈内存总和 

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

JVM——内存管理和垃圾回收

GC   何为GC? Java与C语言相比的一个优势是,可以通过自己的JVM自动分配和回收内存空间。垃圾回收机制是由垃圾收集器Garbage Collection GC来实现的,GC是后台的守护进程...
  • SEU_Calvin
  • SEU_Calvin
  • 2016-07-12 21:05
  • 13901

JVM、垃圾回收、内存调优、常见参数

一、什么是JVM     JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机...
  • u010305706
  • u010305706
  • 2016-03-25 11:53
  • 2471

JVM内存区域和垃圾回收

在JVM规范中,java虚拟机在在运行时用到的存储不同类型数据的区域统称为-Java运行时数据区 在java运行时数据区包括一些部分: 1、程序计数器 2、方法区 3、栈(虚拟机栈、本地方法栈...
  • cysdxy
  • cysdxy
  • 2016-08-26 10:13
  • 803

JVM内存模型及垃圾回收算法

JVM内存模型总体架构图及垃圾回收算法
  • kingofworld
  • kingofworld
  • 2013-12-31 17:29
  • 4138

JVM内存模型及垃圾回收机制

JVM内存模型 1、栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。存储局部变量、引用、方法、返回值等。 StackOverflowError:如果在线程执...
  • zhangpengju999
  • zhangpengju999
  • 2013-09-17 15:22
  • 14515

Java虚拟机垃圾回收(四) 总结:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

Java虚拟机垃圾回收(四) 总结:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法       在《Java对象在Java虚拟机中的创建过程》了解到对象创建的内存分配,在《Java...
  • tjiyu
  • tjiyu
  • 2017-01-17 23:16
  • 2632

JVM内存管理机制和垃圾回收机制

从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的...
  • u011225629
  • u011225629
  • 2015-10-09 15:06
  • 4224

深入理解JVM之垃圾回收详解

一、 垃圾收集的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM...
  • lizhongkaide
  • lizhongkaide
  • 2016-02-25 16:19
  • 5213

JVM内存模型及垃圾回收算法

原文地址: http://blog.csdn.net/kingofworld/article/details/17718587   JVM内存模型总体架构图 程序计数器 多线程时,当线程数...
  • jiary5201314
  • jiary5201314
  • 2016-05-17 10:54
  • 1106

JVM基础 之图解JVM在内存中申请对象及垃圾回收流程

先看一下JVM的内存模型:     从大的方面来讲,JVM的内存模型分为两大块:   永久区内存( Permanent space )和堆内存(heap space)。   栈内存...
  • scholar_man
  • scholar_man
  • 2015-09-09 14:56
  • 278
    个人资料
    • 访问:302643次
    • 积分:4086
    • 等级:
    • 排名:第8772名
    • 原创:42篇
    • 转载:444篇
    • 译文:1篇
    • 评论:17条
    最新评论