Java的内存回收

Java是面向对象的编程语言,一个Java程序往往需要创建大量的Java类,然后对各Java类创建大量的Java对象,再调用这些Java对象的属性和方法来操作它们。

程序员可以通过关键字 new 创建Java对象,即可视作为Java对象申请内存空间,JVM会在堆内存上为每个对象分配内存空间。当一个Java对象失去引用时,JVM的垃圾回收机制会自动回收它们,并释放它们占用的内存空间。

垃圾回收机制具有如下特征:

  • 垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接、网络IO的资源)
  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行。当对象永久性失去引用后,系统就会在合适的时候回收该对象所占用的内存。
  • 在垃圾回收机制回收对象之前,总会调用该对象的 finalize() 方法,该方法可能使该对象重新获得引用变量的引用,从而导致垃圾回收机制取消回收。

    Read More

Java对象及其内存管理

Java内存分配分为两种:

  • 内存分配:特指创建Java对象时JVM为该对象在堆内存中分配的内存空间。
  • 内存回收:当Java对象失去引用,编程垃圾时,JVM的垃圾回收机制自动清除该对象,并且回收该对象所占用的内存。

由于JVM的垃圾回收机制由一条后台线程完成,本身也是非常消耗性能的。

Read More

Java多线程编程基础

线程与进程

进程(Process)代表运行中的程序。一个运行中的Java程序就是一个进程。

从操作系统的角度来说,线程(Thread)是进程中可以独立运行的子任务。一个进程中可以包含多个线程,同一个进程中的多个线程共享该进程所申请到的资源,如内存空间和文件句柄等。

从JVM的角度来看,线程是进程中的一个组件(Component),它可以看作执行Java代码的最小单位。Java程序中的任何一段代码总是执行在一个确定的线程中。JVM启动时默认会创建一个main线程,该线程负责执行Java程序的入口方法(main方法)。

Read More