你知道JVM是如何运行起来的吗?我们的对象是如何分配的?

一个类里包含一个main方法,执行main方法,此时会自动创建一个JVM进程,会默认有一个main线程,这个main线程就负责这个main方法的代码,进而创建各种对象

Tomcat,类都会加载到JVM中,spring容器会将我们的类实例化成bean,有工作线程会来执行我们bean实力对象里的方法和代码,进而会创建其他的各种类,实现业务逻辑

(1)Tomcat有个类加载器,会将我们自己写的系统中的类加载到metaspace元数据区

(2)Tomcat启动会去启动spring容器

(3)spring容器启动后会去扫描代码

(4)spring容器通过反射技术,将创建的bean实例放到堆内存中

public void doRequest(){

    MyService myService = new MyService();

    myService .doService();

}

对象的分配+流转过程如下:

(1)浏览器发送请求,会有自己独立的工作线程,该工作线程有自己的独享内存空间

(2)线程有自己私有的栈内存,会对doRequest()方法创建一个栈帧存放在栈内存中,栈帧中有一个局部变量表

(3)MyService的对象放在堆内存中

(4)线程私有栈内存中栈帧指向公共堆内存中的MyService对象(引用)

(5)栈先入后出,执行myService.doService()方法时,将doService()进行压栈操作

(6)线程私有栈内存中,存放doService的栈帧以及局部变量表

(7)栈顶doService,栈底doRequest

(8)执行完毕后,doServiceh会出栈

  1. 执行完毕后,doRequest会出栈
  2. 销毁doRequest、doService栈帧、局部变量表(查一下,什么时候执行销毁)

总结:首先加载类,然后从main函数开始运行。中间过程涉及new关键字的内存分配,虚拟机栈的压栈弹栈,以及程序计数器,操作数栈等等一系列的的JVM运转。最后失去引用的对象会被GC回收

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值