简单理解JVM类加载

1:JVM通过jvm.cfg文件夹中的jvm.dll文件初始化虚拟机。

2:初始化成功以后会得到一个JNI接口指向本地class文件物理位置。

3:将程序中例如监听器,spring配置的ioc,main函数等类加载。

4:在加载的时候首先将常量和静态变量存放进方法区,类的信息例如类名,方法名,全限定名放入方法区的运行时常量池。

      基本数据类型放入方法栈中。

5:在碰到new关键字的时候,首先去方法区查找是否存在此对象的信息,如果存在就证明这个对象被虚拟机加载过,为了保证数据一致性首先要去方法栈中找到该对象的引用(全限定名),然后通过此引用在堆中去找到它并且销毁,之后按照对应的内存分配方式来分配内存,“指针碰撞”或者“空闲列表”,采用哪种内存分配方式取决于GC是否具备整理功能。在堆中分配内存成功以后,在方法栈中创建对象引用,将对象本身的属性放入方法区。并且分配指针指向堆中内存地址,引用方式为“直接引用”和“句柄引用”取决于虚拟机配置。

(此处,对象中的string存放在哪里?理论来说常量应该是放在方法区的把,此处比较特殊是放在堆中。)

6:继续执行,在对象引用以后会回收方法栈中指针,准备堆中引用的对象GC。

 

以上是最近对于虚拟机一个简单的理解,希望大家可以指正。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值