Java 垃圾收集二 算法
从如何判定对象消亡的角度出发,垃圾收集算法可以划分为 引用计数式垃圾收集(Reference Counting GC)和 追踪式垃圾收集(Tracing GC)两大类。本文介绍的均属于追踪式垃圾收集的范畴。
从如何判定对象消亡的角度出发,垃圾收集算法可以划分为 引用计数式垃圾收集(Reference Counting GC)和 追踪式垃圾收集(Tracing GC)两大类。本文介绍的均属于追踪式垃圾收集的范畴。
Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的墙,墙外面的人想进去,墙里面的人想出来。
Java 虚拟机在执行程序的过程中,会把它管理的内存划分为若干个数据区域,这些区域的用途不一,有着各自的创建和销毁时间。有些区域与虚拟机进程共存,有些区域则依赖用户线程。
一个系统中的进程是与其它进程共享 CPU 和内存资源的。然而,共享内存会形成一些特殊的挑战。如果有太多的进程占用内存,内存很快就会被占满,当一个新来的进程没有内存空间可用时,那它就无法运行。内存中的数据还很容易被破坏,例如,当某个进程不小心写了另一个进程使用的内存,原来的数据就被覆盖,这可能会导致非业务逻辑上的程序错误,这些错误往往都难以定位原因。为了更加有效地管理内存并且减少出错,现代操作系统提出了一个抽象的概念,叫做虚拟内存(Virtual Memory)。
按照冯·诺伊曼设计的计算机模型,CPU 执行指令,存储器系统负责存放 CPU 执行的指令和数据。在现代计算机中,存储器系统由不同容量、不同成本、不同访问时间的各级存储器组成。为什么要这样设计呢?
C 语言中编码整数有两种不同的方式,一种只能表示非负数,也称为无符号数;另一种能够表示负数、零和正数,称为有符号数。而 Java 语言中没有无符号数,所有的整数都是有符号数。