JVM整体结构

本文详细介绍了JVM的运行时数据区,包括堆、方法区、栈、本地方法栈和程序计数器。讲解了内存分配、方法执行时的栈帧工作原理,以及Integer对象的创建过程。还涉及到了GC根节点、垃圾回收机制,如Minor GC和Full GC,以及堆内存的分代模型。此外,讨论了方法区的存储内容和本地方法的特性,并提到了监控GC状态的方法。
摘要由CSDN通过智能技术生成
  • JVM虚拟机组成:运行时数据区(内存模型)、类加载子系统、字节码执行引擎
  • 运行时数据区组成:堆、方法区(共享);栈、本地方法栈、程序计数器(独立于线程)
  • 反编译命令:javap -c User.class
  •  方法运行(启动一个线程)——栈帧内开辟内存空间(进出栈结构先进后出)——栈帧内有:局部变量表、操作数栈、动态链接、方法出口
  • Integer a=1过程: a存在局部变量表——1进入操作数栈——赋值的时候1出栈,进入局部变量表中赋值
  • 程序计数器:记录程序执行的具体步骤编号
  • 静态变量如果是对象,栈中存放内存地址(指针)对象存于堆中
  • 静态方法在加载时静态链接、自己写的方法在运行时动态链接(符号引用替换成直接引用)
  • 方法出口:内层方法执行完成后,回到外层方法的位置继续执行
  • 方法区:常量+静态变量(对象存于堆,内存地址存于方法区)+类信息
  • 本地方法:带native原生方法,底层c++或者其他汇编语言构成

堆 

  • 组成:年轻代(Eden【8/10】;S0【1/10】,Survivor)、老年代(2/3)
  • Eden区满触发minor GC 回收Eden和Survivor非空区域;老年区满触发full GC(或者内存溢出OOM),不仅回收堆,也回收方法区(物理内存默认21M可设置256M)
  • GCroot根节点:本地变量、静态变量、native的变量;同GCroot没有引用的对象均可GC
  • 15次GC进入老年代;1.8以前是永久代(元空间直接内存)
  • JDK查看GC回收:idea中GC回收插件——右下角查看状态
  • stop the world:暂停线程
  • -Xss越小,线程分配内存越小,可容纳线程数量越多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值