尚硅谷周阳JVM视频简要笔记

1 篇文章 0 订阅

一、java虚拟机主要四部分

1.类加载器

2.执行引擎

3.本地接口

4.运行数据区

 

二、运行时数据区:

1.jvm的优化99%在堆,1%在方法区

 

2.方法区:主要是构造方法和接口的代码,静态变量+常量+类信息+运行时常量(实例变量存在于堆内存中)

 

3.栈管运行,堆管存储(虚拟机栈)

栈也叫栈内存,主管java程序的运行,是在线程创建时创建,它的生命周期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束,该栈就over,生命周期和线程一致,是线程私有的。基本类型的变量和对象的引用变量都是在函数的栈内存中分配。

 

3.1栈存储什么(一个弹夹,先进后出,每一个子弹就是一个方法,也叫栈帧)

本地变量:输入参数,输出参数,方法内的变量

栈操作:记录出栈,入栈记录

栈帧数据:包括类文件、方法等

 

exception in thread “main” 

java.lang.StackOverFlowError

4.判断jvm优化是哪里

 

 

5.堆

java.lang.OutOfMemery:heap space

主要分为新生代、养老区、永久区。

5.1、新生代分为伊甸区,幸运区0,幸运区1。新创建的对象在伊甸区,伊甸区会进行初代垃圾回收,如果初代垃圾回收没有回收的会到幸运区。

5.2、养老区,主要是一些池

5.3、永久区,主要是一些系统必须的

 

6.垃圾回收

 

总叙:频繁收集young区(伊甸区),少量收集old区(养老区),基本不动perm区(永久区)

6.1、普通GC发生在新生代(伊甸区),频繁发生,使用的是复制算法copying

6.1.1、普通GC会把伊甸区的存活的对象移动到幸存区,如果幸存区放不下,就会移动到养老区。也就是每次普通GC都会清空伊甸区。

6.1.2、伊甸区(实际是包含了一个幸存区,也叫from区)新生的对象,在经过一次普通GC之后,如果还存活,且能被另一个幸存区(也叫to区)所容纳,则使用复制算法将这些存活的对象就会被移动到to区。然后之前那个from区和伊甸区被清空,此时就命名就发生变化,这个空的幸存区更名叫to区,另外那个就更名为from区(总结起来就是:谁空谁就是to区。)。同时,这些存活的对象的年龄为1。之后每熬过一次普通GC,对象的年龄+1,当对象年龄到达某个值默认15(通过--XX MaxtheuringThreshold设置),就会到老年代。

6.1.3、伊甸区、幸存区0(from区),幸存区1(to区)的比例是8:1:1

6.1.4、好处是复制不会产生内存碎片,缺点是内存只能使用九成

 

6.2、老年代一般是有标记清理或者标记清理和标记整理的混合实现

6.2.1、标记清理:不需要额外的空间,但是两次扫描耗时严重,且会产生内存碎片

6.2.2、标记整理是在标记清理的基础上将内存进行整理,解决内存碎片问题。缺点就是耗时。

 

7、总结

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值