JVM学习笔记

Java生命周期

从前往后,Java类的生命周期包括:加载(Loading) 、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)
其中,验证、 准备、 解析3个部分统称为连接(Linking)
这些过程都是在Java虚拟机(JVM)中进行的

具体请参考这篇文章:java的生命周期

Java内存模型

把百度的图偷过来,这就是是Java的内存模型(Java Memory Model, JMM)
在这里插入图片描述

类加载器

类加载器(ClassLoder)可以理解为JVM的子系统,用于将.java文件编译后的.class文件加载入JVM中,使之成为一个Class类
Java加载时采用的策略是懒惰式加载(按需加载):第一次用到加载,只加载一 次,通过CLASSPATH指定的路径寻找类文件(.class),加载以后是一个Class对象
类加载器共四种:启动类加载器(BootstrapClassLoader)->扩展类加载器(ExtClassLoader)->应用程序类加载器(AppClassLoader)->自定义类加载器(CustomClassLoader),自顶向下继承
启动类加载器由C++编写,加载java核心库 java.*,构造ExtClassLoader(扩展类加载器)和AppClassLoader(应用程序类加载器)

双亲委派机制

双亲委派机制是一种任务委派模式,即将请求递归交由父类加载器执行,具体过程如下:

  1. 当一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行
  2. 如果父类的加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终会到达顶层的启动类加载器
  3. 如果父类加载器可以完成类加载任务,就成功返回,倘若无法完成此加载任务,则委派给它的子加载器去加载

作用:1. 避免反复加载一个类,保证数据安全性;2. 避免核心API被篡改,保证加载的Class对象具有唯一性

沙箱安全机制

Java 安全模型的核心是沙箱,沙箱就是是一个限制程序运行的环境,所谓沙箱安全机制,就是限制Java程序运行在Java虚拟机上,并限制本地系统资源访问,以起到隔离的作用
具体内容请参考这篇博客:沙箱安全机制

Native&方法区

Native是Java中一个关键字,由于Java无法调用系统底层方法,只能通过Native关键字调用java本地接口(JNI Java Native Interface)来调用本地方法库,程序中的所有Native方法存在于JVM的本地方法栈中,执行时统一调用
方法区中包含了常量池、静态变量、常量、类信息(构造方法、接口)以及所有定义的方法的信息

栈&PC寄存器

Java栈,也叫Java虚拟机栈,虚拟机栈为线程私有,即当一个线程创建时都会对应的创建一个虚拟机栈,虚拟机栈的生命周期和线程保持一致
Java栈的作用与C语言中栈的作用相同(比如用于递归调用),主要用于保存方法的局部变量(八种基本数据类型,对象的引用地址),并参与方法的调用和返回
PC寄存器也叫程序计数器,JVM中的PC寄存器是对CPU的寄存器的一种模拟,同Java栈相同,PC寄存器也是线程私有
PC寄存器的作用是储存指令在JVM中的地址,执行引擎会根据PC寄存器中的地址读取指令

堆&GC

参考文章:Java堆内存又溢出了!教你一招必杀技以及JVM堆详解!

在JVM中,堆可以分为三个大区: 新生代(Young Generation space)、老年代(Old Generation space)、永久代(Permanent Generation space,在jdk-8后移除,元空间取代其功能)
其中新生代可以分为三个小区:Eden、Survivor0、Survivor1
如图:在这里插入图片描述

  • 新生区分为三块的原因:这与GC算法(Garbage Collection)中的复制算法有关,描述如下:“将内存按容量划分为两块,每次只使用其中一块。当这一块内存用完了,就将存活的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。这样使得每次都是对半个内存区回收,也不用考虑内存碎片问题,简单高效。缺点需要两倍的内存空间。Survivor0Survivor1就是为此而设计的。
    GC可分为三类:Minor GC、Major GC、Full GC
  • 元空间取代永久区的原因是,1. 永久代内存经常不够用或发生内存泄露;2. JRockit没有永久代,移除永久代是为融合HotSpot JVM与 JRockit VM而做出的努力

总结

据说JVM的知识了解即可
本来还想再写一点JVM调优的,猛然发现自己根本不懂,只能说下次再写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值