Java堆内存设计原理
通常来说,堆中存储通过new字符创建的对象或者数组;
JVM中堆内存分为2大块,Permanent space和 Heap space
- Permanent即持久代(Permanent Generation),主要存储了Java类的定义信息,与垃圾收集器要收集的Java对象关系不大
- Heap={Old+new={Eden,from,to}},Old代表年老代,New代表年轻代,年老代和年轻代的划分对垃圾回收器的影响比较大
Permanent Generation 持久代
用来存放静态数据类型
年轻代、年老代
所有新生的对象首先放在年轻代,年轻代的目标就是尽可能的在此将生命周期短的对象通过垃圾回收器进行回收。年轻代分为3个去,Eden,Survivor(From,To其中,From和To区地位是平等的);
大部分对象是在Eden去生成档Eden区满时,还存活的对象被复制到Survivor区中的From区或者To区,当其中一个Survivor区满时,还存活的对象就被复制到另一个Survivor区,当另一个Survivor区也满的时候,这时候从另一个Survivor区复制过来的仍然存活的对象就有可能被复制到Old区;
针对年轻代的回收 Young GC
针对年老代的回收 Full GC
内存申请过程:
1.JVM会试图为相关的Java对象在Eden区申请内存空间;
2.如果在Eden区内存中空间足够,则申请结束;否则,进行下一步;
3.JVM试图释放Eden区所有不活跃的对象(Young GC),释放后空间仍然不足的话,则JVM会试图将活跃的对象存放至Survivor区中
4.Survivor区是Eden区与年老代的中间件。当年老代空间足够时,在Survivor区中存活了一定次数的对象会被移到年老代;
5.当年老代空间不足时,JVM会在年老代执行完全的垃圾回收(Full GC);
6.当Full GC 后,若Survivor区和年老代仍然无法存放从Eden区复制过来的对象,这时会出现JVM无法在Eden区为新的对象申请内存空间,即“Out of Memory”
出现错误情况
1.年老代溢出 ,表现为 java.lang.OutOfMemoryError:JavaHeapSpace
原因:设置的内存参数Xmx过小或内存泄漏及使用不当问题
2.持久代溢出,表现为java.lang OutofMemoryError:PermGenSpace
原因:持久代设置过小,动态加载大量Java对象导致溢出
解决方法:将 -xx MaxPermSize调大
参数说明(来自网络):
-Xms :初始堆大小。只要启动,就占用的堆大小-Xmx
:最大堆大小。java.lang.OutOfMemoryError: Java heap这个错误可以通过配置-Xms和-Xmx参数来设置-Xss
:栈大小分配。栈是每个线程私有的区域,通常只有几百K大小,决定了函数调用的深度,而局部变量、参数都分配到栈上。当出现大量局部变量,递归时,会发生栈空间OOM(java.lang.StackOverflowError)之类的错误。-XX:NewSize=n
:设置新生代大小的绝对值-XX:NewRatio=n
: 设置年轻代和年老代的比值。比如设置为3,则新生代:老年代=1:3,新生代占1/4的总heap大小。-XX:SurvivorRatio=n
:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有from和to两个。比如设置为8时,那么eden:from:to=8:1:1-XX:MaxPermSize=n
:设置持久代大小 ;java.lang.OutOfMemoryError: PermGen space这个OOM错误需要合理调大PermSize和MaxPermSize大小。-XX:HeapDumpOnOutOfMemoryError
:发生OOM时转储堆到文件,这是一个非常好的诊断方法。-XX:HeapDumpPath
:导出堆的转储文件路径-XX:OnOutOfMemoryError
:OOM时,执行一个脚本,比如发送邮件报警,重启程序。后面跟着一个脚本的路径。
相关推荐
代码随想录的大厂八股文面试相关知识点非常广泛,包括了编程基础、算法设计、代码组织、问题解决等多方面的知识点。为了通过面试,考察者需要具备扎实的编程基础和实践经验,能够熟练掌握多种编程语言和技术,能够写...
* 代码随想录知识星球精华(最强八股文)第三版:这是一个关于编程的知识星球,涵盖了多种编程语言和技术领域,包括C++、Java、Go、数据结构和算法、操作系统、数据库、计算机网络、设计模式、Linux等等。...
代码随想录-八股文 PDF 是一个涵盖了程序员学习必备的内容的知识星球精华,总结了包括 C++、Java、Go 在内的多种编程语言,数据结构和算法、操作系统、数据库、计算机网络、设计模式、Linux 等高频考点。该 PDF 由...
多因子模型系列报告之一----模型理论随想和纯因子组合构建,多因子模型系列报告之一----模型理论随想和纯因子组合构建
中职教材语文(基础模块)(修订版)上册教学设计-随想二则2.pdf
"代码随想录知识星球精华-大厂面试八股文v1.1.pdf" 本资源主要是关于大厂面试的八股文,涵盖了C++、Java、Go、Linux等多方面的知识点,对于程序员来说非常实用。以下是对该资源的详细知识点解析: 1. C++基础知识...
代码随想录知识星球精华(第四版)最强八股文-Java篇 55M大文件,全面详解Java,超全知识点总结,值得收藏
代码随想录知识星球精华-大厂面试八股文v1.1 代码随想录知识星球精华-大厂面试八股文v1.1 代码随想录知识星球精华-大厂面试八股文v1.1 代码随想录知识星球精华-大厂面试八股文v1.1 代码随想录知识星球精华-大厂面试...
代码随想录知识星球精华(最强⼋股⽂) 这份PDF总结了 代码随想录知识星球 的全部精华内容,覆盖了⼏乎程序员学习必备的内容。 知识星球⾥很多录友拿到了⼤⼚offer,包括科班 和 ⾮科班的,⽽他们的每⽇学习总结都是...
付费渠道买的,请珍惜
代码随想录知识星球精华-大厂面试八股文第二版v1.2.pdf c++ java go
Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组...
计算机组成原理是计算机专业的基础知识,包括冯诺依曼体系的结构、CPU和内存、硬盘、各种外设之间的关系、寄存器、缓存等知识。了解CPU的指令、执行指令、数组、结构体、函数调用等概念,都是编程的必备知识。虚拟机...
编程随想:Java新手的通病
本文主要讲述了Java编程新手的一些常见问题,比如说数据结构和算法、面向对象的理解、缺乏良好的编程习惯、以及其他一些问题
代码随想录贪心算法知识,非常管用
代码随想录知识星球精华(第四版)最强八股文-基础篇
本资源摘要信息主要介绍了 Java 和 C++ 语言的知识点,涵盖了指针、引用的概念、变量的别名、常量指针、指针常量等基础知识点,并且对 Java 和 C++ 语言的关键字和运算符进行了详细的讲解。 首先, lets talk about...