JVM相关
1、组成结构
JVM由以下几个区域组成(堆与非堆,线程共享与独享,依赖JVM垃圾回收与手动释放)
堆(heap),动态内存,全局变量,无序
方法区(perm),类的元数据信息,运行时的常量池
虚拟机栈(VM stack),线程私有,局部变量表,存放基本数据类型和对象引用;每个方法在执行的时候,会同时创建一个栈帧用于存放局部变量表,操作数栈,动态链接,方法出口等。
本地方法栈(native method stack),虚拟机使用到的native方法
直接内存,native memory,手动释放,bytebuffer,JNI
2、GC
垃圾回收的算法比较:
按照分区对待:增量,分代
按照回收策略分:引用计数,标记-清除<内存碎片>,copy<两倍内存空间>,标记-整理
按照系统线程分:串行(暂停应用进行回收),并行(暂停应用进行回收),并发(程序和垃圾回收同时运行-->内存碎片)
G1(压缩型,消除内存碎片;实时性要一些)
3、类加载
classloading的机制
装载(load)、链接(link)--对二进制格式校验,初始化装载类中的静态变量以及解析类中调用的接口和类(校验、准备、解析)、初始化(init)--静态初始化代码,构造器,静态属性
类加载器:BootStrap,Ext,System,userDefined
Classloader(loadclass,findclass,defineclass)
热更新,如果用classloader loadclass,需要每次新建一个classloader(同一个classloader不可以加载两个相同的类)
有些内容后续待细化和补充...