Java线程是耗费内存的 -DZone


这项研究清楚地表明,内存是在创建时分配给线程的,而不是根据线程的运行时需求分配的。超级工作线程和几乎休眠的线程都消耗相同数量的内存。现代Java应用程序倾向于创建数百个(有时数千个)线程。但是这些线程大多数都处于WAITING或TIMED_WAITING状态,并且什么也不做。鉴于线程在创建时会立即占用分配的最大内存量,作为应用程序开发人员,您可以执行以下操作来优化应用程序的内存消耗:

  1. 仅为您的应用程序创建*必要*线程。 
  2. 尝试为您的应用程序线程提供最佳的堆栈大小(即-Xss)。因此,如果将线程的堆栈大小(即-Xss)配置为2 MB,并且在运行时您的应用程序仅使用512 KB,则将为应用程序中的每个线程浪费1.5 MB的内存。如果您的应用程序有500个线程,则每个JVM实例将浪费750 MB(即500个线程x 1.5 MB)的内存,这在现代云计算时代并不便宜。

详细研究点击标题见原文