JVM内存结构分析 && 内存分配过程(含图解,面试需知!)

JVM内存结构分析

JVM内存可分为5大块

|–栈
|–本地方法栈
|–堆
|–方法区
|–程序计数器

|–栈
      |–含义:可理解成: 线程栈
      |–分配时机:当有一个线程启动时,栈大佬分配一个栈小弟给该线程专门来支配,所以说栈是能够被私有的内存空间
       |–结构:
            |–由栈帧组成(存放具体内容的地方)
            |–存放的内容
                  |–局部变量
                  |–操作数(即可理解成赋予变量的初始值)
                        |–若基本数据类型则是存放初始值
                        |–若引用类型则是存放该对象在堆中的地址
                  |–动态链接
                  |–方法出口
                        |–方法结束时执行到的代码行
                              |–从程序计数器中得到
            |–数据结构也是栈(FILO)


|–本地方法栈
      |–含义:顾名思义就是专门用来存放线程中所使用到的本地方法的
             ps:本地方法及从刚开始有java的时候便有的方法,和c语言相关,如线程相关的notify()、notifyAll()方法都是本地方法
      |–分配时机:和栈相同


|–
       |–含义:用于存放引用类型的对象(即new出来的对象)
       |–分配时机:有对象被创建就分配空间,但这是一个公共区域,大家的对象都放在这里,不能被私有
      |–结构:
            |–年轻代(占1/3的空间,约200M)
                  |–Eden区(4/5的空间,约160M)
                  |–survivor(1/5的空间,40M)

            |–老年代(2/3,约400M)


|–方法区
      |–含义:用于存放常量静态变量类信息(jvm加载.class文件的时候,该类的相关信息)
      |–分配时机:上述三者被创建时即分配空间
      |–注意:
            |–静态变量对应的若为引用类型,存放的同样是该对象在堆中的地址


|–程序计数器
      |–含义:相当于当前线程所执行的字节码对象的行号指示器
      |–分配时机:线程启动时分配给每个线程(也是私有内存)
      |–起到了保证线程安全的作用,线程被阻塞恢复后依旧能够从停止的地方继续执行

图示虚拟机组成


内存分配过程

迟些再写,会贴出链接…
若上述内容有误,欢迎大佬指正…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值