JVM内存模型、GC理解

JVM虚拟机

在这里插入图片描述

java跨平台
  • Math.java 通过javac 编译成jvm虚拟机可识别的Math.class文件
  • 通过不同系统下载的jdk包,执行同一份Math.class,实现java跨平台。即跨平台是由jdk中的jvm将同一份Math.class转换成相应系统可识别的指令。
jvm组成
  • 堆【共享内存】:存放对象实例。
  • 栈【先进后出FILO】【线程独享内存】:线程执行时,方法需要的内存区域。
  • 方法区【共享内存】:存储类、接口、方法、常量池和静态变量等信息。
    • 栈、方法区静态变量中的对象变量(指针)指向堆中的对象实例。
  • 程序计算器:记录当前线程预执行的下一条指令地址(线程切换时,需要恢复执行程序)。
jvm执行
  • 由类装载子系统将Math.class加载到内存;
  • 字节码执行引擎控制类执行执行,并记录线程执行位置到程序计数器。
GC 理解回收

在这里插入图片描述##### 概念

  • 新生代:Eden + Survivor0 + Survivor1(内存比例:8:1:1)
    • Eden(伊甸园): 对象的首选内存分配区域。
    • S0(幸存区0)-S1(幸存区1):
  • Minor GC(young GC):当Eden内存不足时,由字节码执行引擎启动"垃圾回收线程",对新生代(包括Eden空间和Survivor空间)进行垃圾回收的操作。
  • 可达性分析算法:从GC Roots(例如线程栈、静态变量等)出发,遍历整个对象图,并标记可达对象(非垃圾对象),最终未被标记的对象即为不可达对象(垃圾对象)。
  • 分代年龄: Minor GC中,所有存活的对象会被向一个Survivor空间移动,同时它们的年龄属性会+1。当Survivor空间也不能容纳新对象或者对象的年龄已经达到一定阈值时(一般最大分代年龄为15),这些对象将会被晋升到老年代中。
jvm调优
  • 目的:减少STW(stop the world),GC时会停止用户线程,特别Full GC停止用户线程时长特别长。
  • GC 为什么STW:若GC线程和用户线程同时运行,GC无法通过"可达性分析算法"标记对象是否是垃圾。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值