java虚拟机 (JVM)

本文探讨了JVM内存结构,包括类加载、运行数据区、执行引擎,重点剖析了Java栈、堆(包括新生代和老年代)、方法区(元空间)、程序计数器和本地方法栈。讲解了垃圾回收机制,如轻GC和FullGC的过程,以及JIT编译器和混合模式的工作原理。
摘要由CSDN通过智能技术生成

一.JVM 内存模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

jvm 分为三部曲 :类加载 -> 运行数据区->执行引擎
堆和方法区属于共享区域
程序计数器,本地方法栈,java栈 独享栈,每个java 线程都有一套

在这里插入图片描述
在这里插入图片描述(a).java 栈
在这里插入图片描述

栈内部解析:方法栈帧,局部变量表,操作数栈,动态连接(实现类连接接口),方法出口
在这里插入图片描述
在这里插入图片描述堆:分为年代代(1/3):老年代(2/3):永久代(直接内存,jdk1.8之后叫做元空间 单独的一块虚拟机内存)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

GC 分为轻GC(年轻代) 和FullGC(老年代) ,java 调优目的让fullGC 次数变少,时间越来越短;

年轻代分为 一个eden(伊甸区) 和两个 survivor(幸存者)区域 比例 8:1:1,年轻代每次轻GC 会使用复制算法 进行垃圾回收把eden清空,把幸存的放入 survior(from)空间,再一次gc 把eden 清空,survior(from)空间放入survior(to)空间,然后from变为to,to变为from,**大概轮询15次 (默认的,可以调整)**之后放入 老年代.,如果new 对象很大 会直接放入老年代.

方法区(逻辑概念) 元空间《1.8之后》之前叫做永久代对jvm规范在方法区的实现,可以理解是相等的(但是实际不是)

** 可以理解为元空间《1.8》之前叫做 永久代《1.8之前》** 分为2048个小的空间,实际大小根据内存大小来 一半是 1-4M 左右

fullGC(早期) 如果开始 会 STW(stop the woker) 把整体java 虚拟机线程停止, 专门进行垃圾收集;

在这里插入图片描述JIT(just in time) :在Java编程语言和环境中,即时编译器(JIT compiler,just-in-time compiler)是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序(一次性翻译目标机器代码1010… )放在内存里。

字节码解释器:一行一行翻译(很慢) 翻译目标机器代码1010…

mixed mode:JIT+字节码解释器 ,如果一个类的字节码 第一次执行会使用字节码解释器 如果超过15次之后就会JIT全部翻译.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值