JVM简单个人总结

一、JVM分区

1、方法区

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

2、堆

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

B、分为新生代和老年代

3、程序计数器

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

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

  1. 虚拟机栈
  1. 里面有很多栈帧,一个方法一个栈桢,每个栈帧存(局部变量表、操作数栈、 动态链接、出口)
  2. 局部变量表:8个基本数据类型、对象引用地址、return类型
  3. 操作数栈:进行运算的
  4. 动态链接:存放对其他方法的引用链接
  5. 出口:正常return,不正常抛异常

  1. 本地方法栈
  1. 方法上带native关键字,c和c++的

  • Java内存结构
  1. 判断对象是否存活
  1. 引用计数法:对象在创建时,有计数器,有引用指向就+1,没有引用指向了就 会认为是垃圾,实现简单效率高,但是无法解决循环引用的问题
  2. 可达性分析算法,现在jvm使用的算法
  1. 当一个对象到root下没有引用链是为垃圾对象
  2. GC root:虚拟机栈、静态引用的对象、常量引用的对象、本地方法引用的 对象
  3. 优点:解决循环引用的问题

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

  1. 程序运行中会有大量内存垃圾,虚拟机会不定时进行GC
  2. JVM堆分为新生代和老年代,新生代分为Eden、From Survivor、To Survivor区, 这样能更便于虚拟机管理内存。
  3. 新生代与老年代的内存比值为1:2,(–XX:NewRatio 来指定)
  4. Eden:From:to = 8:1:1,( 可以通过参数 –XX:SurvivorRatio 来设定 ),所 以新生代中有90% 可以使用的内存。
  5. 对象会先在Eden区,当新生代内存不够时,经过一次minor GC,存活下来的 对象转入survivor区,每一次gc存活下来,年龄+1,默认15后转入老年代
  6. 持久代(永久代)就是方法区,存放常量、静态变量和类信息,难以回收

3、垃圾回收算法

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

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

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

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

E、JVM参数

参考小杰爱吃蛋的博客

一篇文章掌握整个JVM,JVM超详细解析!!!_小杰爱吃蛋的博客-CSDN博客_jvm

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

  1. 调优总结,参考别人

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值