Jvm系列-Jvm内存划分

一、总体模型

1.1JVM内存布局

虚拟机栈:
    在每个Java 方法被调用的时候,都会创建一个栈帧,一旦完成相应的调用,则出栈。所有栈帧都出栈了 ,线程就结束了 。
    局部变量
程序计数器:
堆:
元空间:类的元数据,这些信息只对编译器或JVM的运行时才有用


在这里插入图片描述

1.2单个线程组成

在这里插入图片描述

问题
1) JVM内存区域如何划分
         
2)堆 、非堆、本地内存关系

在这里插入图片描述

二、内存划分

img

img

垃圾回收过程

核心:先找到活跃的对象,然后把其他不活跃的对象判定为垃圾,然后删除。
JC ROOT 代表可追溯对象
JVM过程

   标记
   清除
   复制:解决内存碎片问题 ,进行内存整理,就是提供一个一个对象的内存空间,将存活的对象复制过去
   整理:移动所有存活的对象,按照内存地址顺序依次排列,然后将末端内存地址以后的内存全部回收
   
   

问题

1)那些需要那些回收
  垃圾回收是围绕GC ROOTS
  GC ROOTS必须是活跃的引用
  
2)弱引用有什么用
      弱引用相比较软引用,要更加无用一些 ,它拥有更短的生命周期


3)OOM的几个原因
1、内存容量太小了 ,需要扩容
2、错误的引用方式,发生了内存泄漏,没有及时切断与GC Root的关系
3、数据超出范围,比如数据库查询
4、对堆外内存无限制的使用


4)Java 程序是如何运行的
   一个java 程序经过javac 编译成.class 文件,执行引擎执行这些字节码,调用操作系统接口 


5) full GC 原因
   1、调用System.gc
   2、方法区空间不足
   3、老年代空间不足
      新创建的对象都会分配到Eden区,如果该对象占用内存非常大,则直接分配到老年区,此时老年区不足
      做minor gc 曹祖,发现要移动的空间比老年代剩余空间要大,则触发full gc 


参考:

https://blog.csdn.net/weixin_43207056/article/details/104536443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值