首页 > 系统相关 >JVM学习之:堆(Heap)和非堆(Non-heap)内存

JVM学习之:堆(Heap)和非堆(Non-heap)内存

时间:2023-08-08 18:13:46浏览次数:42  
标签:Non JVM 内存 heap 非堆 Heap

JVM学习之:堆(Heap)和非堆(Non-heap)内存

 

堆(Heap)和非堆(Non-heap)内存:

堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。
简单来说堆就是Java代码可及的内存,是留给开发人员使用的;
非堆就是JVM留给 自己用的,所有方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

堆内存分配:
-Xms 256m
-Xmx 256m
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

非堆内存分配:
-XX:PermSize 256m
-XX:MaxPermSize 256m
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
由-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

溢出:

一般情况下出现下列异常可直接定位:
堆溢出:
java.lang.OutOfMemoryError:Java heap spcace
栈溢出:
java.lang.StackOverflowError
方法区溢出:
java.lang.OutOfMemoryError:PermGen space
————————————————
版权声明:本文为CSDN博主「鸡毛陈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shun12580/article/details/93834575

标签:Non,JVM,内存,heap,非堆,Heap
From: https://www.cnblogs.com/iancloud/p/17615057.html

相关文章

  • java heap space解决方法
    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heapsize不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError:Javaheapspace。所以产生这个异样的原因通常有两种:1.程序中出现了死循环2.程序占用内存太多,超过了JVM堆设置的最大值。对于第一种情况,需要自己查看......
  • 详解Jvm中时区设置方式,推荐 代码中TimeZone.getTimeZone("Asia/Shanghai") 而不使用Ti
    详解Jvm中时区设置方式原文链接:https://www.45fan.com/article.php?aid=20090934958860528675768691这篇文章memo一下Jvm中关于时区设定的基础操作。Java的时区设定这里列出如下三种方式方式说明TimeZone.setDefault方式通过java的utils下的TimeZone进行动态设定......
  • JVM系统优化实践(24):ZGC(一)
    您好,这里是「码农镖局」51CTO博客,欢迎您来,欢迎您再来~截止到目前,算上ZGC,Java一共有九种类型的GC,它们分别是:1、SerialGC 串行/作用于新生代/复制算法/响应速度优先/适用于单CPU下的client模式2、ParNewGC 并行/作用于新生代/复制算法/响应速度优先/多CPU的Server模式与CMS配合使用3......
  • 【JVM技术指南】「GC内存诊断-故障问题排查」一文教你如何打印及分析JVM的GC日志(实战
    当我们在开发Java应用程序时,JVM的GC(垃圾回收)是一个非常重要的话题。GC的作用是回收不再使用的内存,以便程序可以继续运行。在JVM中,GC的日志记录了GC的详细信息,包括GC的类型、时间、内存使用情况等。在本文中,我们将介绍JVMGC日志的格式、含义和分析方法。JVMGC日志格式JVMGC日志的......
  • 从原理聊JVM(四):JVM中的方法调用原理
    1引言多态是Java语言极为重要的一个特性,可以说是Java语言动态性的根本,那么线程执行一个方法时到底在内存中经历了什么,JVM又是如何确定方法执行版本的呢?2栈帧JVM中由栈帧存储方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法的调用就是从入栈到出栈到过......
  • 数据结构:堆 heap
    堆分为小顶堆和大顶堆,其本质是一颗完全二叉树,不同点在于:除叶子节点外,小顶堆的每个父节点的key都要比其左右两个子节点的key小;大顶堆的每个父节点的key都要比其左右两个子节点的key大。其中,key是节点的取值,index为节点在树中的索引或者位置。小顶堆/大顶堆的特点在于,其根节点一定......
  • JVM:对象一定在堆中分配吗?
    Java中的对象实例在大多数情况下都是在堆内存中分配的。堆是JVM所管理的内存中最大的一块区域,主要用于存放对象实例和数组。然而,有一些优化技术,如逃逸分析和标量替换,使得并非所有对象都在堆上分配。逃逸分析(EscapeAnalysis)是一种优化技术,用于分析对象动态作用域。如果一个对象......
  • JVM常见参数
    一、JVM参数大致可以分为三类1、标准指令:-开头,这些所有的HotSpot都支持的参数,可以用java-help打印出来.-verbose:gc:用于输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断-verbose:class:输出每次GC的相关情况-verbose:jni:输出native方法调用的相关情......
  • JVM零基础到高级实战之Java内存区域虚拟机栈
    前言JVM零基础到高级实战之Java内存区域虚拟机栈JVM内存模型之虚拟机栈虚拟机栈是什么?用于作用于方法执行的一块Java内存区域为什么要有虚拟机栈?每个方法在执行的同时都会创建一个栈帧(StackFramel)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至......
  • JVM
    一、解决什么问题1.解决Java跨平台问题的2.解决Java如何让计算机运行的3.解决内存的分配释放,如垃圾回收gc4.安全性,如字节码验证和安全沙箱5.异常处理6.多线程7.动态加载,即动态的加载和卸载代码,这样比较灵活和可扩展,如即时编译器JIT二、如何解决的1.跨平台?方法:通过不同......