【JVM入门】尚硅谷-周扬-2019JVM

JVM体系结构概览

亮色:所有线程共用;存在GC
暗色: 线程私有; 不存在GC
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类加载器

  • 什么是
  • 有几种
  • 双亲委派
  • 沙箱安全

java memory management在这里插入图片描述
结合下面这篇帖子
Java程序在内存中运行详解

在这里插入图片描述
在这里插入图片描述
stack管运行,heap管存储
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
Exception in thread "main" java.lang.StackOverflowError这是一个Error不是Exception

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
java8之后,永久区换成了元空间。

物理上, heap只有新生区和养老区两个部分。

Eden区满了, 开启GC是YGC,Minor GC, Eden基本清空

S0 = from
S1 = to

S0, S1交换
from区和to区,他们的名分不是固定的,每次GC后会交换,GC之后有交换,谁空谁是to区

Old养老去满了,开启Full GC = FGC, Major GC

Full GC多次,发现养老区空间没法腾出来, OOM异常(堆内存溢出) OutOfMemoryError
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public static void main(String[] args) {
        long maxMemory = Runtime.getRuntime().maxMemory(); //返回Java虚拟机试图使用的最大内存量
        long totalMemory = Runtime.getRuntime().totalMemory(); //返回Java虚拟机中的内存总量。
        System.out.println("MAX_MEMORY=" + maxMemory + "(字节)、" + (maxMemory / (double)1024 / 1024) + "MB");
        System.out.println("TOTAL_MEMORY=" + totalMemory + "(字节)、" + (totalMemory / (double)1024 / 1024) + "MB");

    }

实际生产中必须把-Xms初始内存和-Xmx最大内存设置为一样的

在IDEA中配置JVM的堆内存
在这里插入图片描述
//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

在这里插入图片描述
在这里插入图片描述
引用计数算法

复制算法
在这里插入图片描述
在这里插入图片描述
复制算法,优点,没有碎片,缺点,耗空间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标记清除法
和标记压缩一样,一般用在老年代
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标记压缩算法
整理由标记清除产生的碎片
标记-清除-整理算法,简称标记压缩
时间慢
在这里插入图片描述

第五种
在这里插入图片描述
分代收集!!!

所有算法的一个比较
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_27637285/article/details/107533383