在看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中栈内存和堆内存详解,非常容易理解
详细的讲解了java内存分配,包括运行时堆和栈内存的分配,变量和方法存储等
Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会初始化这个对象中变量。虽然Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分配,也就是说在建立一个对象时在堆和栈中都...
摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一名有10多年经验的高级系统架构师,他的主要...
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过...
Eclipse Memory Analyzer 是一个功能丰富且轻量的 Java 堆内存分析工具,可以用来辅助发现内存泄漏减 少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对 ...
Java内存分配与管理是Java的核心技术之一,今天我们深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的...
Java堆、栈和常量池——内存剖析
偶然看到一道面试题,Java在实例化一个类的时候,数据在堆和栈中是如何存放的? public class A{ public int i=1; public static A a1 = new A(); public static void mian... Java把内存分为堆内存
JAVA内存溢出问题总结
从 Java 代码到 Java 堆 理解和优化您的应用程序的内存使用 很有用!~
IBMJava堆内存调优套件,可以协助内存泄露排查
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的 栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当...
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java在栈中为这个变量分配内存空间,当超过...
针对java实时规范中的非堆内存抽象,讨论实现中的不确定因素以及运行时不可预测的时间特性,提出并实现了一种用于硬java实时平台的非堆内存模型.模型基于硬java实时平台预处理机制的支持,采用一种基于静态约束的安全...