JVM内存分布

一、简介

JVM是一个老生常谈的问题了,所以篇中的内容,更多的是为了复习总结。

二、JVM内存分布

整理了一张脑图,这里只是对jvm的描述,在不同的jvm中也可能会有变动

 

三、部分数据流转

       代码如下:

public class MyClass {
    public static void main(String agrs[]){
        int first_num = 0;
        TestStackAndHeap testStackAndHeap = new TestStackAndHeap();
        testStackAndHeap.test = 1;
        testStackAndHeap.tests[100]++;
    }
}
public class TestStackAndHeap {
    public int []tests;
    public int test;
    public TestStackAndHeap(){
        tests = new int[1000];
        for(int i = 0;i<tests.length;i++) {
            tests[i] = i;
        }
    }

}

    内存图:

  1、在主方法中进行声明的first_num自然是保存在stack中

  2、图中忽略了创建时,调用TestStackAndHeap的构造方法,本质是在int数据指向的为位于java heap中testStackAndHeap实例中的数据部分。数据计算完成后最终会放置在位于堆中的实例数据中。

  3、当堆tests[100]进行运算时,首先需要做的是将数据从堆中copy一份入栈,运算完毕在进行出栈刷新至堆中对应区域,由于这个过程并非原子操作,所以线程同步时需要加锁。

  4、这里没有提到字符串,字符串位于常量池中,jvm1.7以上常量池位于heap中

  5、栈和堆以及方法区都会出现溢出,前者对应的stackoverflow,后两者对应的是oom

  6、方法(method)以栈帧的形式压如栈中,一个方法的结束通常伴随着栈帧的弹出,而堆中的数据则需要进行清理

下楼吃饭~

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值