JVM 原理:

jvm:Java虚拟机,是一个提供Java代码运行的虚拟环境,每一个Java程序在运行时,都有自己的一个jvm

Java核心3大区域:栈内存、堆内存、方法区(永久代)

栈内存: (私有)

存放内容:基本数据类型(整数、小数、字符、布尔...)
int a = 1
int b = 2
对象的引用(变量o):
Object o = new Object();
特点:每一个线程创建时,jvm会给它分配一个属于自己的栈内存,当线程运行结束时,属于它的栈内存也会释放

每个栈由多个栈帧组成,对应每次方法调用时所占的内存

每个线程只能有一个活动栈帧,对应者当前正在执行的那个方法。

栈内存溢出:

1、栈帧过多导致的栈内存溢出

2、栈帧过大导致的栈内存溢出

堆内存

作用:堆是用于存放对象的内存区域

特点:

堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。

堆的区域是用来存放对象的实例,因此也是垃圾收集器管理的只要区域

堆在逻辑上分为,新生代和老年代

运行原理(l理解):

新创建的对象,首先放在新生代中的Eden区
当Eden区放满后,JVM会扫描Eden区,将仍然存活(有人用)的对象转移到S0区
转移完成后,JVM会一次性把Eden区和S1区清空
后续如果再有新的对象创建,继续往Eden区存放
当过了一段时间后,Eden又放满了,JVM会扫描Eden区+S0区,将存活对象转移到S1区(原来是空的),并一次性把Eden区+S0区清空
当某次转移的时候,发现S0或者S1空间不足,不能存放下转移的数据,此时JVM会将存活对象转移到老年代中

永久代

• 永久代也叫(Method Area)
• 各线程共享,主方法区要存放类信息、常量、静态变量,如
public static int a = 10
• 垃圾回收行为比较少见

作用:存储每个类的结构   代码中静态的,固定的数据

Java8从Jvm中移除了PermGen,使用Metaspace(元空间)来代替永久代

Metaspace不存在Jvm中,而是存在本地内存中

配置元空间初始值和最大值参数:
-XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=64m


JVM启动时,分成2种模式:
当检测到本地电脑配置低时,启动client模式
当检测到本地电脑配置高时,启动server模式
server模式性能更好,但是会占用更多的资源
如何判断配置高或低?(CPU核数、内存大小、操作系统)

垃圾回收-GC

◼ 新生代引发的GC叫YoungGC
◼ 老年代引发的GC叫FullGC
FullGC会引起整个Jvm的用户线程暂停,待垃圾回收完毕后,才继续运行

• 哪些内存需要回收?

确定对象“存活”还是“死去”  通过根搜索算法(GC Roots)


• 什么时候回收?


• 如何回收

 堆垃圾回收算法

◼ 标记-清除算法
◼ 复制算法
◼ 标记-压缩算法
◼ 分代收集算法

分代收集算法

• 当代的商业虚拟机都采用“分代收集”
• 根据对象的存活周期的不同将内存划分成几块,一般Java堆分为新生代和老
年代
• 新生代采用复制算法
• 老年代采用标记-压缩算法

垃圾收集器

 • Jvm不同的区域可以采用不同的垃圾收集器组合,主要有:
– Serial收集器(串行)
– ParNew收集器(并行)
– CMS收集器(并发)
– G1(时间优先)

CMS收集器

• 并发收集器(ConcurrentMarkSweep)
• 采用了标记-清除、标记-压缩算法
• 并发收集、低停顿
• 缺点:
– 消耗cpu
– 会产生内存碎片
– 浮动垃圾(Concurrent Mode Failure)

CMS相关参数
-XX:+UseConcMarkSweepGC:默认关闭,ParNew+CMS+Serial Old,当CMS收集器出现
ConcurrentModeFailure错误(Jvm预留空间不足以容纳程序使用),采用后备收集器Serial Old
-XX:CMSInitiatingOccupancyFraction=80:CMS收集器在老年代空间被使用多少时触发FullGC,默认为92
-XX:+UseCMSCompactAtFullCollection:CMS收集器在FullGC时开启内存碎片的压缩,默认关闭
-XX:CMSFullGCsBeforeCompaction=8:执行多少次不压缩FullGC后,进行一次压缩,默认是0(代表每次
FullGC都进行压缩)
-XX:+UseCMSInitiatingOccupancyOnly:使用手动定义初始化定义开始,禁止hostspot自行触发CMS GC
-XX:ParallelGCThreads=8:并行收集器的线程数,此值最好配置与处理器数目相等 同样适用于CMS
日志参数:
-XX:+HeapDumpOnOutOfMemoryError:当发生内存溢出时,进行堆内存dump-XX:+PrintGCDetails:打印
GC的详细信息

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值