java堆被所有线程共享的一块内存区域
虚拟机启动时创建java堆
java堆的唯一目的就是存放对象实例。
java堆是垃圾收集器管理的主要区域。
从内存回收的角度来看, 由于现在收集器基本都采用分代收集算法, 所以Java堆可以细分为:新生代(Young)和老年代(Old)。 新生代又被划分为三个区域Eden、From Survivor, To Survivor等。无论怎么划分,最终存储的都是实例对象, 进一步划分的目的是为了更好的回收内存, 或者更快的分配内存。
java堆的大小是可扩展的, 通过-Xmx和-Xms控制。
如果堆内存不够分配实例对象, 并且对也无法在扩展时, 将会抛出outOfMemoryError异常。
虚拟机的堆大小设置不属于java标准选项,也就是说实现一个java虚拟机,不一定要支持这个功能。不过流行的发行版都是实现了这个选项,输入java -X,会输出有哪些非标准选项被支持。
单独输入这个选项(-Xms),是不能工作的,缺少必要的class参数,请注意提示的用法那一段中,非中括号的部分,那些是必选的。
正确用法:
java -Xss64m Test
Test是class的名字
命令行java –Xms128m //JVM占用最小内存
–Xmx512m //JVM占用最大内存
–XX:PermSize=64m //最小堆大小
–XX:MaxPermSize=128m //最大堆大小