JAVA程序运行堆栈分析

在这里插入图片描述
经过编译之后形成的字节码16进制文本文件
在这里插入图片描述
在这里插入图片描述
源代码编译之后形成.class的字节码文件,字节码文件经过类加载器,加载到JVM当中
左边是一个进程的所有线程共享的内存空间,右边是一个进程当中不同线程独有的
线程独占会随着线程结束而销毁,线程共有需要JVM来维护,比如GC对堆内存的维护
在这里插入图片描述
GC可以对方法区进行管理。方法区一般存放累的描述信息,类的静态成员变量等等
在这里插入图片描述
堆内存存放的是对象,GC主要是对对象实例进行回收,OOM错误就是堆内存满了。
堆中的GC算法后续会有详细介绍(分代搜集算法,复制算法,标记清除。标记压缩)等等
在这里插入图片描述
所有线程共享,看图。虚拟机栈这个地方主要保存的是线程的方法,每一个方法就是一个栈帧。
每一个方法里面含有局部变量,返回地址等等。栈内存溢出说的就是线程方法调用过多导致栈内存不够,比如说递归。
在这里插入图片描述
本地方法栈:是提供给native的修饰符修饰的方法使用的,v本地方法也和现成的调用方法一样。
在这里插入图片描述
程序计数器:记录当前线程执行到字节码的哪一行了,为了线程上下文切换
下面讲解的就是字节码文件:里面的内容,之前是16进制的表示
在这里插入图片描述
查看java源代码编译后的字节码文件:
在这里插入图片描述
类的描述信息:上图
在这里插入图片描述
在这里插入图片描述
方法的描述信息:上图
在这里插入图片描述
main函数的字节码编译之后的查看:上图(5是有5个本地变量,参数有1个)
在这里插入图片描述
指令码:16进制,去查表可以看字节码源文
第一步:字符串常量放在元空间,方法区中。首先类信息放在方法区中,常量池都放在方法区(元空间)

在这里插入图片描述
在这里插入图片描述
第二部:创建线程 本地方法栈现在还用不到:记录线程的方法栈,程序计数器(方法指针)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时候有个新的方法进来,开辟一个新的栈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值