
JVM
文章平均质量分 76
双木青橙
这个作者很懒,什么都没留下…
展开
-
Java内存学习笔记05-内存分配与回收策略
内存分配与回收策略 对象优先在Eden分配 前面已经提到过,在新生代,Eden和Survivor区域的容量比值,比值为8,在大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。 Minor GC和Full GC的区别 新代代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象 大多都具有 朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。 老年代GC (Majar GC、Full GC)指发生在老年代的原创 2022-02-27 18:30:56 · 563 阅读 · 0 评论 -
Java内存学习笔记04-垃圾收集算法与垃圾收集器
1.垃圾收集算法 1.1 标记-清除算法 最基础的收集算法是“标记-清除”(Mark-sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象,后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高;另一个是空间问题,标记清除之后会产生大量的不连续的内存碎片,空间碎片可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一原创 2022-01-12 22:32:07 · 273 阅读 · 0 评论 -
Java内存学习笔记03-判断对象是否存活
1.前言 Javam内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈本个区域随着线程而生,随线程而灭; 栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译期进行一些优化,但在本章基于概念模型的讨论中,大体可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了,而Java堆和方法区则不一样,一个原创 2022-01-03 12:26:04 · 445 阅读 · 0 评论 -
Java内存学习笔记02-对象访问
对象访问 在Java语言中,即使是最简单的访问,也会涉及Java栈,Java堆、方法区这三个最重要的内存区域之间的关联关系,如下面这句代码: Object obj = new Object(); 假设这句代码出现在方法体中,那Object obj这部分的语义将会反映到Java栈的本地变量表中,作为一个reference类型数据出现。而new Object()这部分的语义将会反映到Java堆中,形成一块存储了Object类型所有实例数据值(Instance Data,对象中各个实例字段的数据)的结构化内存。原创 2022-01-03 11:38:22 · 156 阅读 · 0 评论 -
Java内存学习笔记01-运行时数据区域划分
运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域,如下所示: 1. 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 程序计原创 2022-01-03 10:58:12 · 568 阅读 · 0 评论