美文网首页
Java虚拟机(JVM) 之 内存区域

Java虚拟机(JVM) 之 内存区域

作者: 波波维奇c | 来源:发表于2019-03-30 14:30 被阅读0次
那么问题来了,懂了 内存区域 之后,你能干嘛?

就 Android 开发来说,如果不知道虚拟机是怎么样使用内存的,一旦发生内存泄漏和溢出方面的问题,那么排查起来就比较困难了,而且之所以程序在正常情况下不会发生溢出和泄漏的情况就是在虚拟机自动内存管理机制的帮助下完成的。

内存区域划分


可以知道 运行时数据区 划分有 线程共享线程私有
线程共享:
方法区、Java堆
线程私有:
堆虚拟机栈、本地方法栈、程序计数器

Java 堆(Java Heap):

特点:
是 Java 虚拟机管理内存中最大的一块,是线程共享的内存区域,垃圾收集器管理的主要区域,因此又称为“GC 堆”(Garbage Collectioned Heap)
作用:
主要是存放对象的实例
抛出的异常:

  • 当对象数量到达最大堆的容量限制后就会产生内存溢出异常
  • 当出现Java堆内存溢出时,异常堆栈信息“java.lang.OutOfMemoryError”会跟着进一步提示“Java heap space”。

方法区:

特点:
是线程共享的内存区域
作用
存储已被虚拟机加载的信息、常量、静态变量、类信息、JIT编译后的代码等数据
抛出的异常

  • 如果产生大量的类或者大量的字符串常量(运行时常量池溢出)可能导致方法区溢出
  • 通常伴随 java.OutOfMemory Error:PermGen space

虚拟机栈

特点:
是线程私有的内存区域
作用
是Java方法执行的内存模型,描述一个方法从调用到完成的过程,方法执行时创建栈帧,用于存储局部变量表,操作数栈、动态链接,方法出入口等信息。
抛出的异常
java.lang.StackOverflow Error 、java.lang.OutOfMemoryError

本地方法栈

特点:
是线程私有的内存区域
作用
为 Native 提供服务
抛出的异常
java.lang.StackOverflow Error 、java.lang.OutOfMemoryError

程序计数器

特点:
是线程私有的内存区域
作用
是当前线程所执行的字节码的行号指示器。
如果线程正在执行的是一个Java方法,那么计数器记录的是正在执行的虚拟机字节码指令的地址;
如果线程正在执行的是一个Native方法,那么计数器的值则为空。
在Java虚拟机规范中,是唯一一个没有规定任何OutOfMemoryError情况的区域。

本地内存(Direct Memory)

直接内存并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中农定义的内存区域。在JDK1.4 中新加入了 NIO(New Input/Output) 类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用 native 函数库直接分配堆外内存,然后通脱一个存储在Java堆中的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。

相关文章

  • Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 @(Java虚拟机)[jvm, 内存] [TOC] 运行时数据区域 Java虚拟机...

  • JVM从入门到精通系列(二):JVM内存区域及运行时内存

    JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA ...

  • JVM内存模型

    JVM内存区域 JVM内存区域主要分为线程私有区域【程序计数器,虚拟机栈,本地方法栈】,线程共享区域【JAVA堆,...

  • JVM内存区域划分

    一、概述 根据《Java虚拟机规范》的描述,JVM所管理的内存区域如下图所示: JVM内存区域主要分为线程私有区域...

  • GC垃圾回收机制

    一、JAVA内存区域: 在Java运行时的数据区里,由JVM(JAVA虚拟机)管理的内存区域分为下图几个模块: 其...

  • JVM内存区域与垃圾回收

    1、JAVA内存区域与内存溢出 1.1、概述 Java中JVM提供了内存管理机制,Java虚拟机在执行Java程序...

  • Java 内存

    Java 内存区域与内存溢出 内存区域 Java 虚拟机规范将 JVM 所管理的内存分为一下几个: 程序计数器 J...

  • JVM

    JVM的内存布局? Java虚拟机主要包含几个区域: Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建...

  • [JVM]理解Class文件(2)

    深入理解Java虚拟机[JVM]Java内存区域与垃圾收集 - 思维导图[JVM]类加载机制 - 思维导图[JVM...

  • [JVM]理解GC日志

    深入理解Java虚拟机[JVM]Java内存区域与垃圾收集 - 思维导图[JVM]类加载机制 - 思维导图[JVM...

网友评论

      本文标题:Java虚拟机(JVM) 之 内存区域

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