zoukankan      html  css  js  c++  java
  • 面试之四:JVM内存区域分配

    • 1、程序计数器(线程私有)【不会OOM
      • 记录线程执行的代码位置,每个线程各自独有。
    • 2、栈:虚拟机栈和本地方法栈(线程私有)【会OOM和StackOverflow
      • 虚拟机栈
        • 每个JAVA方法在执行时都会创建一个栈帧。
          • 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
      • 本地方法栈:同虚拟机栈。只是用于Native方法
    • 3、JAVA 堆(线程共享)【会OOM
      • 用于存放对象实例。
      • 垃圾收集器主要区域。
      • 细分为:新生代和老年代等
        • 从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。
    • 4、方法区(线程共享)【会OOM(HotSpot也叫永久代)【+运行时常量池】
      • 主要存放:
        • 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
      • 4.1 细分:运行时常量池(方法区的一部分)
        • 存放类加载后Class文件中的常量池信息(Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用)
    • 5、直接内存(非虚拟机运行数据的一部分,即系统中除分配给JVM虚拟机之外的内存)会OOM
      • 不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
      • 但这部分内存也被频繁使用,也可能导致OutOfMemoryError异常。
     
  • 相关阅读:
    如何将DataTable转换成List<T>
    关于SqlDataAdapter的使用
    VS 2010中JS代码折叠插件
    ASP.net中的几种分页方法
    学习jquery基础教程的一些笔记
    js中innerHTML与innerText的用法与区别
    SpringBoot 中使用shiro注解使之生效
    redis分布式锁
    使用ZSetOperations(有序)操作redis
    使用SetOperations(无序)操作redis
  • 原文地址:https://www.cnblogs.com/buwuliao/p/10646868.html
Copyright © 2011-2022 走看看