JVM内存模型以及垃圾回收

本文介绍了JVM内存结构,包括mainmemory和heapmemory的作用与管理方式。mainmemory存储对象变量值,支持多线程共享;heapmemory则管理对象的生命周期,并详细讲解了其内部的permanentspace、oldspace及newGeneration分区。

JVM内存包含main memory和heap memory。

main memory存放对象变量的值,每个线程有自己的工作内存。变量的值对所有线程访问是共享的。 main不是由jvm管理的。




 
说到main memory,要提到volatile。在变量前面用volatile修饰的话,线程不会把该变量copy到工作内存操作,而是直接访问主存的变量。

heap memory结构图示如下:



permanent space:存放加载到jvm里面的class 对象。我们常配置的jvm 其空间大小不包含在heap memory里面。主程序不会在运行期间不会对permanent space 进行gc. permSize配置100,heap配置1000,,那么jvm大小至少有1100m

old space:存放生命周期比较长的对象

new Generation包括:
   1. eden:存放刚被实例化的对象
   2. from space和to space存放没被garbege collection回收的对象,总成叫 survivor spaces

面来看一下类被实例化的过程
   1. 类实例化对象时候,jvm在eden为其分配空间
   2. 当eden空间不够的时候,进行下面的流程
   3. 清楚eden不活动的对象,如果空间还不够 存放新对象,则将eden的对象移到survivor spaces里面,如果
   4. 清楚eden的垃圾对象
   5. 将eden存活的垃圾对象copy到survivor spaces(from space 或to space)
   6. 如果survivor spaces满了,则将survior的live对象copy到old space. old space 采用mark-compact算法

Refer to: http://hi.baidu.com/xuwanbest/blog/item/0587d82f2c44a73d1e30892e.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值