JVM内存模型

举报
西魏陶渊明 发表于 2022/09/25 03:21:39 2022/09/25
【摘要】 我们在学习JVM的内存管理的时候,我们的思维要跳出Java的局限。我们要这么理解。我们写的Java代码,是运行在JVM上的。 如果让你来实现JVM那么。你会怎么处理呢? 什么是公共部分,什么是私有部分? 公共部分(堆heap) Class字节码是公共的,是共享的,所有线程都要认识字节码。new的对象是公共的,也...

我们在学习JVM的内存管理的时候,我们的思维要跳出Java的局限。我们要这么理解。我们写的Java代码,是运行在JVM上的。 如果让你来实现JVM那么。你会怎么处理呢?

  1. 什么是公共部分,什么是私有部分?
  • 公共部分(堆heap)
    • Class字节码是公共的,是共享的,所有线程都要认识字节码。
    • new的对象是公共的,也是共享的,所有线程要都能认识这些实例对象,能读取到实例的数据。
  • 私有部分 (栈stock)
    • Java中每个线程的执行中的代码,及代码中的局部变量等信息是私有的。每个线程之间都要维护一份。
    • JVM虚拟栈和本地方法栈。
    • 代码是怎么执行的,当然是一行一行执行。那么这一行一行的代码是放在哪里的呢? 是放在栈里面的。Java代码是在JVM来执行的。 所以这个栈,我们称为JVM虚拟栈。
    • JVM中有些方法是调用其他语言实现的, 会使用本地方法栈。
    • 那么谁来读取栈里面的数据,来出栈执行呢? 这叫做PC寄存区。
  1. 这些区域的内存是如何划分的呢?

  2. 传说中的GC的内存回收策略?

https://arthas.gitee.io/jad.html jad命令

打开arthas 找到类 [arthas@87476]$ sc sun.reflect.GeneratedMethodAccessor* 扫描动态生成的类。

反编译看下反射类中的代码

元空间使用 https://xiaogenban1993.github.io/20.04/%E7%BB%BC%E8%BF%B0_%E5%86%85%E5%AD%98.html

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858078

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。