jvm-内存空间(3)

 

public class Demo {

    public static String name = "333";

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.compute();
    }

    public void compute() {
        int a=1;
        int b=2;
        int c=(a+b)*10;

    }
}

1:类加载子系统(把.class文件加载到内存中)

     主要有三个加载器:引导类加载器,扩展类加载器,应用程序加载器

2:运行时数据区

  1. 堆内存:对象信息   
  2. 栈内存:方法,以及局部变量
  3. 方法区:类信息,常量和静态变量
  4. 程序计数器:当前线程运行到那个阶段,记录(因为cpu来回切换线程,每个线程执行一阶段时记录,为了当线程切换到时,知道该线程运行到哪一阶段,根据此记录继续执行)
  5. 本地方法栈:调用native方法时存的信息

3 :字节码执行引擎

(目前还不清楚)

 

 

 

4:栈内存

  1. 局部变量表:方法里面的变量  例: a,b,c
  2. 操作数栈 :存放变量值  例:1,2
  3. 动态链接:
  4. 方法出口:记录当前方法结束后,需要回到那个阶段继续执行   例:main方法调用compute方法,compute方法的  “方法出口”就是main的  demo.compute(); compute方法执行完,会在main方法继续执行

 

执行方法时:会在栈内存给该方法分配一个空间,叫做栈帧

 

 

 

 

 

1:eden : 数据先存入到eden区域

2:当eden第一次区域数据满,执行minor gc,清理eden区域, eden还有引用的数据,则先移动到s0(这次的数记录为a(+1))  (数据移动几次,记录几次。记录15直接移动到老年代)

3:  当eden第二次 区域数据满,执行minor gc. 清理eden区域,同时清理s0,s1.    清理s0区域数据,如果还有引用的数据 移动到s1(这次的数据 记录为s(+1)),   eden还有引用的数据,则先移动到s0(这次的数记录为a(+2))

 

 

当执行gc是 所有用户线程暂停:

 

 

 

 

 

 

 

 

 

         

         

         

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值