Java虚拟机中的内存分配

一、堆空间的划分和JVM相关参数的解释

Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决下面两个问题:

  • 给对象分配内存空间
  • 回收分配给对象的内存

先来看一下在Java 8 之后堆内存在逻辑上的划分:

  1. 新生代(新生区):PSYoungGen (又分为Eden、from、to)
  2. 老年代(养老区):ParOldGen
  3. 元空间:MetaSpace

一起来看看给对象在内存分配空间的过程:

  1. 对象优先在堆内存的Eden区中分配
  2. 在后续分配新对的空间时,Eden区如果满了会进行Minor GC,还存活的就会进入新生代中的Survivor区其中的一个
  3. 如果再次经历垃圾回收时,会将已经存放有数据的幸存者区(Survivor)中的内存区(一般把已经存放了数据的称为from区,空的称为to区)通过复制,全部转移到to区中(会重复此操作)
  4. 在对象经历一定次数的Minor GC后,就会进入老年代(还有其他特殊的情况也会直接进入老年代)

设置堆内存大小

Java堆区用于存储Java对象实例,堆的大小在JVM启动的时候就已经设置好了,先来看看默认情况下的内存大小。

默认情况下:

  • 初始内存大小:物理电脑内存大小的64分之一(例如我的电脑内存16G,则16 / 64 = 0.25 G)
  • 最大内存大小:物理电脑内存大小的四分之一(例如我的电脑内存16G,则16 / 4 = 4 G)

可以设置堆空间(新生代+老年代)的初始内存大小:-Xms
在这里插入图片描述

  • -X是JVM的运行参数
  • ms是memory start

可以设置堆空间的最大内存大小: - Xmx
在这里插入图片描述
通过下面的代码可以获取默认的初始内存和最大内存的大小

package learn.demo.jvm;

public class HeadSpaceInitial {
   
    public static void main(String[] args) {
   
        long initialMemory = Runtime.getRuntime(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值