java程序员必学 - JVM

JVM

JVM加载顺序

在这里插入图片描述

类加载器

类加载器,通过双亲委派机制,先委托给父类找代码,再一步一步交给子类,防止用户代码污染源代码。

在这里插入图片描述

栈空间

栈空间,通过栈帧管理程序的运行。

方法区

方法区(元空间),存放类的结构信息,被虚拟机加载的类信息、常量、静态变量、以及编译后的方法等数据 。

空调 f = new 格力();
/*
    方法区  ->  f
*/

堆空间

堆空间(存储空间),分为新生代,老年代,元空间。新生代和老年代采用的虚拟机配置的内存空间,元空间采用的是机器的物理内存空间。

GC

GC,垃圾回收算法。分代收集算法分为4种,复制算法,引用计数算法,标记清除算法,标记压缩算法。

在这里插入图片描述

复制算法,将内存分为两部分,回收时对其中一部分内存进行垃圾回收,然后复制到另外一个内存空间。优点:效率高。缺点:碎片多,浪费空间,适用于新生代Eden区。

引用计算法,(不常见),通用可达性分析,判断对象是否被引用,引用+1,不引用-1。从而判断该对象是否该回收。

标记清除算法,标记可回收的对象再进行清除,需要两次扫描,缺点:碎片多,优点:节约空间。

标记压缩算法,标记可回收的对象,清除完毕后再对碎片空间进行压缩。优点:无碎片,节约空间。缺点:浪费时间。 标记压缩算法和标记清除算法适用于老年代。

JMM

JMM ,即java内存模型。为了保证程序运行时解决对象储存到计算机存储空间的线程问题。

  • 原子性,保证多次访问数据一致性问题。
  • 可见性,共享对象发生改变对其他线程可见。
  • 有序性,程序运行顺序运行。

JVM每个线程运行时有一个独立工作内存, 每次去主空间拿去数据后对数据上锁(lock),然后(read and load )读取到工作空间由执行器对数据进行修改(use and assign ),修改完毕后再由工作空间写入(store and write)到主空间中,并解锁(unlock ),最后通知其他线程。采用的是一种悲观锁的方式。
在这里插入图片描述

补充:

类的加载顺序是:静态代码块 -> 构造快 -> 构造方法

extend 抽象类 和 new实例对象是对立管理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值