`
king_tt
  • 浏览: 2229368 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java堆内存Heap与非堆内存Non-Heap

 
阅读更多

堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),而64bit以上的处理器就不会有限制了。

分享到:
评论

相关推荐

    基于HeapAnalyzer456.jar 分析java内存溢出

    Java内存分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存主要存储对象实例,当程序创建过多的对象而无法在堆内存中找到足够的空间时,就会出现内存溢出。非堆内存则包含JVM自身运行所需的内存,如方法区、栈...

    JAVA-WEB系统性能调优.doc

    2.1.1、JAVA内存组成介绍:JAVA内存组成包括堆(Heap)和非堆(Non-heap)内存两个部分。堆内存用来存储对象实例,非堆内存用来存储类加载信息、方法区、常量池等。 2.1.2、堆内存分配:堆内存分配是指JVM根据系统...

    JAVA 内存设置原理

    JVM的内存模型主要由以下几个部分组成:堆内存(Heap)、非堆内存(Non-Heap)、线程栈(Thread Stack)等。本文将重点讨论堆内存的设置与管理。 #### 一、堆内存(Heap) 堆内存是JVM用来存储对象实例和数组的...

    认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

    JVM 中的内存管理机制可以分为两部分:堆(Heap)和非堆(Non-heap)内存。堆是 JVM 中用于存放类实例和数组的内存区域,而非堆是 JVM 中用于存放方法区、JVM 内部处理或优化所需的内存的区域。 堆内存分配可以通过...

    java内存管理精彩概述

    JVM内存分为堆(Heap)、非堆(Non-Heap)和本地内存(Native Memory)。堆分为年轻代(Young Generation)、老年代(Tenured Generation)和持久代(PermGen,JDK 8以后被元空间取代)。堆转储(Heap Dump)是记录...

    Java虚拟机内存管理与内存泄漏.pdf

    JVM内存主要分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存用于存放对象实例,是垃圾回收的主要区域。在堆内存中,还分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为Eden区和两个...

    android studio finished with non-zero exit value 1, value 2解决办法

    5. 如果使用的是 IDE 的自定义内存设置,则在 `File > Settings > Build, Execution, Deployment > Compiler > Android > Dex` 中调整 `Java max heap size`。 **示例代码**: ```groovy dexOptions { ...

    JAVA内存结构-GC-CLASSLOAD

    **垃圾收集与内存分配** 2.1 **垃圾收集(GC)** - **目标**:自动回收不再使用的对象,释放内存。 - **分区**:新生代(Young Generation)包括Eden区和两个Survivor区,老生代(Old Generation)。 - **算法**...

    Java虚拟机内存区域模型

    Java虚拟机规范将方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆)。方法区同样会抛出OutOfMemoryError异常。 直接内存是一块可以在Java堆和Native堆之间来回复制数据的内存区域,同样会抛出...

    eclipse.ini

    堆(Heap)和非堆(Non-heap)内存 按照官方的说法:java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。在JVM中堆之外的内存称为非堆内存(Non-heap ...

    Jconsole监控Java应用

    非堆内存(Non-heap Memory)包含一个在所有执行序共用的方法区域(method area)和内部进程或JVM优化所需的内存。 堆内存池(Heap Memory Pool)包括: * Eden Space(heap):大多数物件初始化时从Eden Space池...

    weblogic内存调优

    首先,JVM内存分为两大部分:堆(Heap)和非堆(Non-heap)内存。堆内存主要用来存储程序运行时创建的所有对象,包括数组和类实例。它可以通过-Xms和-Xmx参数来设置初始大小和最大大小。默认情况下,JVM会根据物理...

    java内存泄露定位与分析共13页.pdf.zip

    Java内存主要分为堆(Heap)和非堆(Non-Heap)两大部分。堆是Java对象的主要存储区域,而非堆主要包括方法区、JVM本地方法栈和JVM线程栈。内存泄露通常发生在堆内存,尤其是当对象不再被程序使用但仍然保留在内存中...

    内存溢出配置,内存溢出配置

    - **方法区(Method Area)**:也称为非堆(Non-Heap),用于存储每个类的信息,包括常量、静态变量等。 - **程序计数器(Program Counter Register)**:当前线程所执行的字节码的行号指示器。 - **虚拟机栈...

    slice:Java库,可有效处理堆内存和堆外内存

    通常,Java的内存分为堆内存(Heap Memory)和非堆内存(Non-Heap Memory),其中堆内存主要用于存储对象实例,而非堆内存则包括方法区、JVM线程栈等。在某些高并发或者大数据处理场景下,传统的内存管理方式可能...

    Java获取系统CPU、内存、硬盘等系统信息

    下面的代码展示了如何获取堆内存(Heap Memory)和非堆内存(Non-Heap Memory)的使用情况: ```java import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java....

    Java运行时内存分配

    只需使用`new`关键字创建对象即可,Java运行时系统将自动在堆中分配内存。但这种灵活性需要更多的处理时间,因此在堆中分配内存通常比在堆栈中慢。 ##### 4. 静态存储(Static Storage) 静态存储位于RAM中,用于...

    JVM内存设置与调优指南

    1. **堆(Heap)**:这是Java对象的主要存储区域,分为年轻代(Young Generation)和老年代(Tenured Generation)。年轻代又细分为Eden区、Survivor区(S0和S1),新生的对象主要在Eden区分配,经过几次垃圾收集后...

    java非堆CodeCache详解

    Java应用程序运行时的内存主要分为两大部分:堆(Heap)与非堆(Non-Heap)。其中,堆内存用于存储对象实例以及数组等数据;而非堆内存则用于存储JVM运行时的数据区,例如方法区(Method Area)、线程栈(Thread ...

    java虚拟内存.pdf

    2. **方法区(Method Area)**:也称为非堆(Non-Heap)内存,存储了类的元数据,包括类的名称、方法信息、字段等。这部分内存同样被所有线程共享。在Java 8之后,方法区被替换为元空间(Metaspace),元空间主要...

Global site tag (gtag.js) - Google Analytics