JVM简单个人总结

网友投稿 709 2022-05-30

一、JVM分区

1、方法区

是所有线程共享的内存区域,它用于存储已被Java虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

2、堆

A、是jvm内存中最大的一块,在虚拟机启动时开辟,存放所有数组和对象实例

B、分为新生代和老年代

3、程序计数器

A、保存当前线程正在执行的字节码指令的地址

B、一个线程有一个程序计数器,会记住线程的运行,不然线程挂起后就不知道在 干嘛了,只有run方法

虚拟机栈

里面有很多栈帧,一个方法一个栈桢,每个栈帧存(局部变量表、操作数栈、 动态链接、出口)

局部变量表:8个基本数据类型、对象引用地址、return类型

操作数栈:进行运算的

动态链接:存放对其他方法的引用链接

出口:正常return,不正常抛异常

本地方法栈

方法上带native关键字,c和c++的

Java内存结构

判断对象是否存活

引用计数法:对象在创建时,有计数器,有引用指向就+1,没有引用指向了就 会认为是垃圾,实现简单效率高,但是无法解决循环引用的问题

可达性分析算法,现在jvm使用的算法

当一个对象到root下没有引用链是为垃圾对象

GC root:虚拟机栈、静态引用的对象、常量引用的对象、本地方法引用的 对象

优点:解决循环引用的问题

2、垃圾回收机制,简称GC

程序运行中会有大量内存垃圾,虚拟机会不定时进行GC

JVM堆分为新生代和老年代,新生代分为Eden、From Survivor、To Survivor区, 这样能更便于虚拟机管理内存。

JVM简单个人总结

新生代与老年代的内存比值为1:2,(–XX:NewRatio 来指定)

Eden:From:to = 8:1:1,( 可以通过参数 –XX:SurvivorRatio 来设定 ),所 以新生代中有90% 可以使用的内存。

对象会先在Eden区,当新生代内存不够时,经过一次minor GC,存活下来的 对象转入survivor区,每一次gc存活下来,年龄+1,默认15后转入老年代

持久代(永久代)就是方法区,存放常量、静态变量和类信息,难以回收

3、垃圾回收算法

A、引用计数法:当引用为0时,回收,优缺点同上被认为垃圾的对象

B、标记-清除算法:标记就是上面说认为是否为垃圾,清除是进行清除,老年代应 用多。

C、标记-整理算法:同上,但是清除后会将可用的内存“整理”到一起,老年代使 用,解决内存碎片化问题,但是移动对象,需要更新引用。

D、复制算法:和C相似,区别在于用两块内存空间,适合survivor区两块

E、JVM参数

全局可在idea包的bin目录下的idea.exe.vmoptions里配置保存

调优总结,参考别人

Java JVM

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux 操作系统原理 — Namespace 资源隔离
下一篇:【C++ 语言】pthread_mutex_t 互斥锁
相关文章