java 的对象加载过程与堆栈方法区

  1. .java文件被javac.exe编译为.class文件
  2. 通过类加载器加载.class 文件
  3. 验证是否符合jvm编译规则,一般用javac.exe编译的是不会有问题的,但是不排除有人用其他方法生成.class;
  4. 分配空间。后面会说到这里
  5. java.exe执行

 

-》2:类加载是双亲委托机制; 

当本地类加载器加载一个class时,它首先不会自己去尝试加载这个类,
而是把类加载请求委派给父类加载器扩展级类加载器去完成。

当扩展级类加载器加载一个class时,它首先也不会自己去
尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。

如果启动级类加载器(BootStrapClassLoader)加载失败,会使用扩展级类加载器来尝试加载;
若扩展级类加载器也加载失败,则会使用本地类加载器来加载,
如果本地类加载器也加载失败,则会报出异常ClassNotFoundException。

-》4:分配空间 主要需要关心堆区,栈区,方法区,其实方法区也是堆区的一部分,只不过平时都分开描述

加载时,在方法区里,加载代码块-静态变量-静态方法-字符串常量

执行时,找程序执行入口main:然后会在栈区为它分配一个栈帧,里面存放main方法的局部变量;栈是每个线程独有的,不可共享

如果遇到新建对象操作,即new,就会在堆区中给它分配一个空间,存放对象的属性,变量,方法;(如果对象中有字符串,就会有从该字符串到方法区字符串常量的连接。)然后堆区中对象建立完毕会有一个内存地址给请求新建对象。这样在执行过程中就会通过该地址来访问堆区的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值