美文网首页
JVM基本知识-内存结构

JVM基本知识-内存结构

作者: DoubleFooker | 来源:发表于2019-10-23 19:40 被阅读0次

JVM的内存结构

jdk8 jvm说明
根据oracle官方文档的描述,可以总结JVM运行时内存的划分

image.png

Java虚拟机栈

线程私有。每个jvm线程都会创建他的线程栈,线程的每次方法执行都会创建一个栈帧,栈帧存储局部变量、操作栈、动态链接、返回地址等。每次方法的执行相当于入栈出栈的过程。
Java虚拟机栈可能出现的StackOverflowError、OutOfMemoryError。

程序计数器

当前线程所执行的字节码行号指示器。可以理解为再多线程环境下,线程的运行受cpu调度的不确定性,线程需要记录当前执行的指令位置,以便cpu调度唤醒时能够恢复到正确的执行位置。唯一一个不会出现OOM的内存区域。

本地方法栈

即JVM提供的native方法服务。

对象创建的地方,占用jvm内存最大块。GC回收也主要在这里进行。同时根据规范的实现,堆按年代分为年轻代、老年代、永久代(Metaspace)。年轻代具体还可分为Eden、From survivor、To Survivor。


image.png

方法区

线程共享,运行时常量池存储类信息,常量,静态变量,即编译器编译完的代码数据

OOM的场景

  • StackOverflowError,最常见出现的场景,递归
public class SOFDemo {
    public static void main(String[] args) {
        loop();
    }
    private static void loop(){
        loop();
    }
}
Exception in thread "main" java.lang.StackOverflowError

OOM

public class OOMTest {
    /**
     * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
     */
    public static void main(String[] args) {
        List<byte[]> list = new ArrayList<>();
        int i = 0;
        while (true) {
            list.add(new byte[5 * 1024 * 1024]);
            System.out.println("分配次数:" + (++i));
        }
    }
}
分配次数:1
分配次数:2
分配次数:3
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid52924.hprof ...
Heap dump file created [16950087 bytes in 0.018 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.ognice.demo.OOMTest.main(OOMTest.java:20)

相关文章

  • JVM基本知识-内存结构

    JVM的内存结构 jdk8 jvm说明根据oracle官方文档的描述,可以总结JVM运行时内存的划分 Java虚拟...

  • JVM内存结构和Java内存模型

    最近看到两个比较容易混淆的概念:JVM内存结构和Java内存模型 JVM内存结构JVM内存结构或者说内存模型指的是...

  • JVM 内存结构解析

    1. JVM内存结构 (1) JDK1.7的JVM内存结构 JVM内存结构主要有三大块:堆内存、方法区和栈。 堆内...

  • JVM学习笔记

    一、JVM的结构图 1.1 Java内存结构 JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大...

  • JVM-02

    JVM内存结构

  • JVM内存模型和JVM内存结构的区别

    JVM内存模型与内存结构不是同一个概念,JVM内存结构是从运行时数据区的结构角度描述的概念,而JVM内存模型是从主...

  • 《深入理解java虚拟机》之JVM内存结构总结

    JVM内存结构 JVM内存结构不光是只有堆内存和栈内存,实际情况要复杂很多,主要包含以下结构。 程序计数器 每个线...

  • JVM

    简介 Jvm 系列一:Java类的加载机制Jvm系列二:JVM内存结构 --内存泄漏与内存溢出Jvm系列三:GC算...

  • java线程安全相关问题

    可见性问题的原因: 1.JVM内存结构: JVM的内存结构分为主内存(heap)和工作区内存。 主内存可以存放多线...

  • JVM(七):JVM内存结构

    JVM(七):JVM内存结构 在前几节的文章我们多次讲到 Class 对象需要分配入 JVM 内存,并在 JVM ...

网友评论

      本文标题:JVM基本知识-内存结构

      本文链接:https://www.haomeiwen.com/subject/fgocpctx.html