jvm(个人用)

.java==>class File==>Class Loader==>

运行时数据区(RunTime Data Area)==>

方法区、Java栈、本地方法栈、堆、程序计数器<==>本地方法接口<==本地方法库

jvm调优(方法区、堆),大部分都是堆里

类加载器:加载class文件

凡是带了native关键字的说明Java的作用范围到不了了,回去底层调用C语言的库

进入本地方法栈

调用本地方法本地接口JNI   Java native interface

栈--》先进后出,后进先出

队列:先进先出

栈不存在垃圾回收问题

8大基本类型+对象引用+实例的方法

栈运行原理:栈帧

一个jvm只有一个堆内存。堆内存的大小是可以调节的

gc垃圾回收主要是再伊甸园区和养老区

jdk8之后永久存储区被改成元空间

jdk1.6:永久代、常量池再方法区

1.7:永久代、慢慢退化,去永久代、常量池再堆中

1.8:无永久代、常量池再元空间

OOM:

1.尝试扩大堆内存看结果

2.分析内存看一下那个地方出了问题

jprofile、mat作用

分析dump内存文件,快速定位内存泄漏

获得堆中的数据

获得大的对象

-Xmslm -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

+PrintGCDetails  查看gc垃圾回收信息

-Xms 设置初始化内存分配大小 1/64

-Xmx 设置最大分配内存,默认1/4

GC:垃圾回收(新生区(伊甸园区、幸存一区(from)、幸存二区(to))、老年区、持久区)

方法区、堆

一般垃圾回收都是在新生区

GC两种类:轻GC(普通GC)、重GC(全局GC)

GC的常用算法:标记清除算法、标记整理算法、复制算法、分代收集算法(引用计数器)

谁空谁是to

每次GC回收,伊甸园区把活的对象移动到幸存区,伊甸园区则空

JVM老年区默认值是15次GC

复制算法:好处没有内存碎片、坏处:浪费了空间,多了一般永远是空(基本使用实在新生区)

最佳使用场景:新生区

标记清除法

标记:对活着的对象进行标记

清除:对没有标记的对象进行清除

优缺点:严重浪费时间、会产生内存碎片

优点不需要额外的空间

标记压缩

防止内存碎片产生,再次扫描,向一段移动存活的对象,多了一个移动成本

先标记清除法、再标记压缩

年轻代:存活率低---复制算法

老年代:存活率高----标记清除法+标记压缩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值