jvm

java内存模型与分区:

本地方法栈:native方法调用本地其他语言接口;

程序计数器:记录当前线程的运行位置;

:存放运行时的方法,包括:局部变量表、操作数栈、动态链接(指向常量池)和方法返回地址

:初始化的对象、成员变量。

方法区

类型信息(加载类的类型(Class)、类的完整名称、类型修饰符等);

域信息(public);

方法信息(void、int);

全局变量(static final);

常量池(运行时常量池);

参数:

-Xss:设置栈最大空间;

-Xms:设置堆起始空间;

-Xmx:设置堆最大空间;

指令:

jps:查看当前程序运行的进程;

jstat -gc 进程号:gc信息;

堆:

可设置线程私有的TLAB缓冲区;

新生代Survivorfromto),老年代

​ 8 : 1 : 1

​ 1 : 2

例:

Person person = new Person();

方法区

栈 -> 堆(对象实例数据) -> 方法区(对象类型数据)

栈 -> 堆 -> 方法区

对象头:

内容:运行时元数据、类型指针;

对象的访问定位:使用句柄、直接指针;

类加载子系统:

加载class文件。

过程:加载、链接(验证、准备、解析)、初始化;

分类:引导类加载器、启动类加载器、扩展类加载器;

双亲委派机制:类加载器接到类加载请求,委托父类加载。

破坏双亲委派机制:重写loadClass和findClass;

StringTable:

Jdk9:byte[];

jdk8:存储在堆中;

垃圾回收算法:

引用计数法:循环引用导致回收失败;

可达性分析算法:GCRoots(可以是除堆之外的其他地方);

标记-清除算法

标记-整理算法

复制算法;

分代收集算法;

强引用:new对象,内存不够,报OOM都不回收;

软引用:new softReference,内存不够,回收;

弱引用:new WeakReference,遍历时,回收;

虚引用;

垃圾回收器:

新生代

Serial:串行回收,复制算法;

ParNew:并行回收;

Parallel GC:吞吐量优先;

G1

老年代:

Serial Old:串行回收,标记压缩算法;

CMS:初始标记(STW)、并发标记、重新标记(STW)、并发清除;

优点:并发收集、低延迟;

缺点:碎片、CPU依赖、浮动垃圾;

G1:区域化分代式,可控延迟,获取高吞吐量;

堆内存分割为区域;

初始标记(STW)、并发标记、再次标记(STW)、独占清理(STW)、并发清理

posted @ 2023-04-13 15:20  maxzhangxiaotao  阅读(19)  评论(0编辑  收藏  举报