JVM之什么是垃圾
是否活着 在堆里存放着的几乎所有的对象实例,垃圾收集器在堆进行回收前,第一件事情就是要确定这些对象之中哪些还"活着",哪些已经"死去"。引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器就减一;任何时刻...
是否活着 在堆里存放着的几乎所有的对象实例,垃圾收集器在堆进行回收前,第一件事情就是要确定这些对象之中哪些还"活着",哪些已经"死去"。引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器就减一;任何时刻...
分配内存 在类加载检查通过后,虚拟机将为新生对象分配内存,对象所需内存大小再类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。指针碰撞 假设Java堆中内存时绝对规整的,所有被使用过的内存都被放在一...
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作"非堆(Non-Heap)",目的是与Java堆区分开来。栈、堆、方法区交互关...
核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但是在逻辑上它应该是...
字节码的旅途运行时数据区 JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有个字的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖用户线程的启动和结束而建立和销毁。上图的运行时数据区就是本文的重点了。程序计数器 &n...