在看Netty时,看到了一个词,“非堆内存”。 简单来说,堆内存就是heap, 非堆内存就是non-heap.
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。
具体来说,Non-Heap Memory Pool包括:
1. Code Cache (non-heap):储存编译的程式码和local variables。
2. Permanent Generation(non-heap):包含虚拟机器自身的所有反射资料。 比如class和mothod物件。 对于使用class data sharing的JVM,分为唯读(shared-ro)和读写(shared-rw)两个区域。
现在的疑问是:Netty为什么用Non-Heap Memory呢?为什么用Non Heap Memory就能加快读取速度呢?
相关推荐
本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。 #### 二、堆内存与栈内存概述 ##### 1. 堆内存 堆内存是Java虚拟机(JVM)用于存储...
### Java中堆内存和栈内存详解 #### 一、引言 Java作为一种广泛使用的编程语言,其内存管理机制是理解程序行为的关键。本文将深入探讨Java中的两种主要内存区域:堆内存(Heap Memory)和栈内存(Stack Memory)。...
Java中栈内存和堆内存详解,非常容易理解
【标题】:深入理解Java内存使用与优化...总的来说,理解Java内存使用并进行优化不仅涉及Java代码的编写,还包括对JVM和操作系统内存管理的深刻理解。通过细致的分析和实践,开发者可以创建出更高效、更健壮的应用程序。
如果DLL中分配了内存但未正确释放,或者Java和DLL之间对对象的引用处理不当,都可能导致内存泄露,使得Java进程的内存占用持续增长,影响系统性能。 描述中的“NULL”可能是博主在描述问题时的简化表示,通常在编程...
2. **Method Area(方法区)**:又称为非堆区或永久代,在这里存储的是类和接口的元数据,包括类的名称、字段和方法信息。如果方法区的空间耗尽,会抛出`java.lang.OutOfMemoryError: PermGen space`异常。在现代JVM...
Java 实现内存动态分配主要涉及Java内存模型以及内存管理机制,包括堆内存和栈内存的分配,以及垃圾回收等概念。下面将详细解释这些知识点。 1. **Java内存模型** Java程序运行时,内存分为堆内存(Heap)和栈内存...
Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...
Java堆内存模型的设计目的是为了在高效分配内存和快速垃圾回收之间取得平衡。理解堆内存的结构和分配策略,对于编写高效的Java程序至关重要。通过合理配置JVM参数,我们可以优化内存使用,提升程序性能。希望本文对...
### Java内存机制学习和使用 #### 一、Java内存机制概览 Java内存管理是Java开发人员必须掌握的核心概念之一。良好的内存管理不仅能够提升应用性能,还能避免常见的内存泄漏问题。本文旨在深入探讨Java内存机制,...
Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...
2. **非堆内存**:非堆内存通常指的是Java虚拟机(JVM)中除堆内存之外的内存区域,如方法区、栈内存和直接内存。在Java实时系统中,非堆内存的管理对于实现可预测的性能至关重要。 3. **不确定因素与运行时不可...
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过...
Java内存主要分为堆内存(Heap)和栈内存(Stack)。堆内存用于存储对象实例,而栈内存则用于存储方法调用时的局部变量和方法参数。除此之外,还有方法区(Method Area)、程序计数器(PC Register)以及本地方法栈...
你可以通过JVM启动参数-Xms和-Xmx来分别设置初始堆内存和最大堆内存。例如,`-Xms256m -Xmx1024m`将初始堆设置为256MB,最大堆设置为1024MB。 2. **监控应用内存消耗**:使用工具如VisualVM或JConsole来实时监控...
本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地理解和应对这一挑战。 #### 二、Java内存模型与内存区域 Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)...
Eclipse Memory Analyzer 是一个功能丰富且轻量的 Java 堆内存分析工具,可以用来辅助发现内存泄漏减 少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对 ...