JVM深入浅出

JVM简介

JVM:java虚拟机(java virtual machine)包括栈、堆、方法区、垃圾回收器、寄存器、字节码指令集组成。

JVM运行过程

java程序➡➡➡➡通过类加载器子系统(编译成.class字节码文件)➡➡➡➡进入运行时数据区(包括堆、栈、方法区、程序计数器)➡➡➡➡通过执行引擎(即时编译器、垃圾回收器进行垃圾回收及其将.class字节码文件编译为相应操作系统的机器码)➡➡➡➡执行java程序(操作系统通过本地接口库调用运行时数据区内容进行相应指令操作
JVM

JVM内存区域

私有内存:随着线程的启动而创建,随线程的结束而销毁
共享内存:随着虚拟机的启动而创建,随着虚拟机关闭而销毁
堆外内存:主要通过NIO类调用native函数库直接分配堆外内存,减少频繁的从虚拟机的内存区域中存在的对象复制到直接内存
详情了解请看链接: https://blog.csdn.net/qq_43279637/article/details/84572489.
内存区域

共享区域之方法区

方法区也称永久代,主要是用于存储常量、运行时常量池、静态变量、类信息、即时编译器编译后的机器码
方法区

JVM的运行时内存(堆)

年轻代

Eden区:对象存放的第一个阶段,(比作婴儿的出生区);如果新创建的对象为大对象则不经过该区域,则直接进入老年区(大对象一般为2KB-128KB),可通过XX:PretenureSizeThreshold设置其大小。Eden内存空间不足时会触发MinorGC(复制算法)进行垃圾回收
survivorFrom区:保留的上一次MinorGC的幸存者。
survivorTo区:将上一次MinorGC时的幸存者作为这一次MinorGC的被扫描者
堆
复制算法图解
复制算法

老年代

主要是存放长生命周期的对象和大对象,老年代的GC过程叫做MajorGC(标记整理算法或标记清除算法),在执行MajorGC之前会执行一次MinorGC,如果还是内存不足才会执行MajorGC。

标记清除算法图解
标记清除算法

标记整理算法
标记整理算法

永久代

指永久保存区域,主要存放Class和Meta(元数据)的信息,GC不会在程序运行时对永久代进行清理,这也导致Class文件过多就会抛出内存不足(Out of Memory异常)
Java 8中永久代已经被元数据区取代,二者最大的区别永久代数据存储在虚拟机中,而元数据区则是直接操作系统的本地内存

本章重点

1.每一次执行MinorGC后,SurvivorTo与SurvivorFrom交换位置,原来的SurvivorTO区域成为下一次GC时的SurvivorFrom区。
2.对象晋升老年代&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值