jvm笔记五-买球官网平台

`

jvm笔记五-堆区

jvm笔记五-堆区

在jvm中,堆区是重中之重。通过前面文章的学习,我们知道了,栈区是不会有垃圾回收的,所以,经常说的垃圾回收,其实就是回收的是堆区的数据。在这里,我们将会看到传说中的,新生代、老年代、永久代(元空间)。凯哥java(kaigejava)欢迎大家一起学习。

堆(heap):

一个jvm实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三个部分:

堆内存分区:

young generation space 新生区 young/new

tenure generation space 老年代 old/tenure

permanent space 永久区/元空间 perm

java 7之前的堆内存示意图:

编辑

简版流程:

编辑
编辑

新生区是类的诞生、成长、消亡的区域,一个类在这里产生、应用,最后被垃圾回收器收集,结束生命。

新生区又分为两部分:伊甸园区(eden space)和幸存者区(survivor space)。所有的类都是在伊甸园区被new出来的。

幸存区有两个:0区(survivor 0 space)和1区(survivor 1 space).

当伊甸园区的空间用完时候,程序又需要创建对象,jvm的垃圾回收器将对伊甸园区进行垃圾回收(minor gc,也叫轻gc 或者是ygc),将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后伊甸园中的剩余对象移动到幸存0区(也叫from区)。若幸存0区也满了,再对该地区进行垃圾回收,然后移动到1区(也叫to区)。

如果1区也满了怎么办呢?在经历了15次ygc后,幸存1区也满了,那么这个时候,jvm将会把这些数据移动到养老区。如果养老区也满了,这个时候就会进行majorgc(也称full gc 检查fgc)。执行full gc对养老区的内存进行清理。如果养老区执行了full gc之后,发现依然无法进行对象的保存,这个时候就会出现oom(outofmemoryerror)异常了。

如果出现了java.lang.outofmemoryerror:java heap space异常。说明java虚拟机的堆内存不够用了。主要原因有以下两种:

1:java虚拟机的堆内存设置不够,可以通过参数-xms、-xmx来调整

2:代码中创建了大量的大对象,并且长时间不能被垃圾回收器回收的(内存地址被引用了)

当你的才华撑不起你的野心的时候,你就应该静下心来学习;

当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;

梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静下心来学习,耐心沉淀,送给自己,共勉!

0
0
分享到:
|
评论

相关推荐

    目录: 1.jvm体系结构概述 2.堆体系结构概述 3.堆参数调优入门 4.总结

    jvm笔记 1、jvm总体架构.pdf 2、堆内存内部结构.pdf 3、有关内存的常用配置参数.pdf 4、有关内存溢出和内存泄漏的知识点.pdf 5、jvm里的垃圾回收机制.pdf 6、jvm优化知识点升级和配置总结.pdf 7、tomcat调优...

    ├─4.03 jvm虚拟机常识-虚拟机堆内存结构.mp4 ├─4.04 jvm虚拟机常识-jvm虚拟机参数类型-常用的jvm参数.mp4 ├─4.05 java细腻及讲解-jvm虚拟机常识-常用垃圾回收算法.mp4 ├─4.06 jvm运维实用排障工具.mp4 ├─...

    自己总结的jvm中堆的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者

    学习 09 方法区, 记录方法区相关知识,重绘图示和 ppt。 文章包括栈、堆和方法区交互、方法区基本概念、方法区的演进、方法区的内部结构、方法区垃圾回收等相关内容。

    1:jvm内存模型:类加载机制【转载、验证、准备、解析、初始化】 类装载器【装载器分类、加载原则】 运行时数据区【方法区、堆、虚拟机栈、本地方法栈、程序计数器】。 2:垃圾回收:垃圾确定【引用计数法、可达性分析...

    程序计数器 虚拟机栈 本地方法栈 堆 方法区

    这是对jvm内存有关的一点小笔记,希望对大家有帮助,存在不足与错误的地方,请大家多多包涵,多多指教。java

    title: 黑马jvm学习笔记二 date: 2020-01-13 1:00:00 tags: jvm categories: jvm 黑马jvm 内存结构 内存结构总览图: ...程序计数器是java虚拟机规范中唯一一个不会存在内存溢出的区(堆和栈等会出现内存溢

    2.1栈指向堆 2.2 方法区指向堆 2.3 堆指向方法区 2.4 java对象内存布局 3.1 图解 3.2 对象创建所在区域 3.4 old区详解 3.5

    2.线程共享(堆与方法区) 程序计数器:因为cpu会划分为时间片给多个线程执行,所以需要程序计数器记录下指令执行到具体的位置,当下次线程切换时,从记录的位置继续执行,同时它也是唯一不会发生oom错误的。 本地...

    ​ 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 ...

    jvm的重要性不言而喻,这个是学习jvm是看视频和读《深入理解jvm》时做的一些笔记,用于复习参考。 读书笔记 第2章:java内存模型和内存溢出异常 1.运行时数据区域 1.程序计数器:线程私有 2.java虚拟机栈:线程私有...

    答:class可以被实例化,属于引用类型,是分配在内存的堆上的,struct属于值类型,是分配在内存的栈上的. [page] 26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写: namespace test { public ...

    与我一起学 jvm:java 虚拟机内存组成概念前言java 虚拟机内存划分运行时数据区域程序计数器java 虚拟机栈局部变量表本地方法栈java 堆方法区运行时常量池直接内存 前言 刚开始看《深入理解java虚拟机》,文章主要就...

    java8流源码代码一写 钥匙带走 kotlin 已经是一种可以在 jvm 上安全探索的优秀语言。 领先于 java 数年。...探索无反射框架和其他技术以获得云原生体验 ...中的特性,这对于可堆叠性和 mixin 很有趣。 不过,我不

    java笔记 [toc] 运行一个java程序的步骤: 1、编辑源代码xxx.java 2、编译xxx.java文件生成字节码文件xxx.class 3、jvm中的类加载器加载字节码文件 4、jvm中的执行引擎找到入口方法main(),执行其中的方法 一、jdk、...

global site tag (gtag.js) - google analytics