JVM内存模型:堆空间的认识

Java中的堆空间用于存储对象实例和数组(当然,数组引用存储在Java堆栈中)。所有线程都共享堆,因此需要锁定对象内存的分配,这也导致新对象的开销相对较大。JVM中只有一个堆空间。堆空间是Java垃圾收集器管理的主要区域,Java的垃圾收集机制将自动处理它。
  jvm内存模型

为了提高对象内存分配的效率,SunHotspotJVM为创建的线程分配了一个单独的空间TLAB(线程本地分配缓冲区),该空间的大小由JVM根据运行情况来计算,而不是在TLAB上分配对象时需要。锁定,因此当为线程对象分配内存时,JVM将在TLAB上分配尽可能多的内存。在这种情况下,在JVM中分配对象内存的性能基本上和C一样高效,但是如果对象太大,仍然可以直接使用堆空间分配。
  堆空间分为老年代和年轻代。刚创建的对象存放在年轻代,而老年代中存放生命周期长久的实例对象。年轻代中又被分为Eden区和两个Survivor区(FromSpace和ToSpace)。新的对象分配是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,在Survivor区的对象经历若干次GC仍然存活的,就会被转移到老年代。当一个对象大于eden区而小于old区(老年代)的时候会直接扔到old区。而当对象大于old区时,会直接抛出OutOfMemoryError(OOM)。
  相关推荐:【鲁班学院】java高级培训-能懂系列之Map详解
  如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值