JVM为了方便管理内存空间,充分使用内存空间,把使用到的内存空间,分为以下几块区域,每块区域只存放特定的信息
堆:
存放信息:所有的对象和数组
这块内存区域又分为新生代、老年代。新生代用于存放刚产生的新对象,老年代存放年长的对象,多次GC都没有被回收的对象。新生代又分为三块区域:Eden:刚产出的对象,S0 1:至少经过一次GC活下的对象。之所以这样区分的目的,是为了垃圾回收快速选择要回收的对象
所有线程共享
内存溢出时抛出:OutOfMemoryError
设置该内存块大小:-Xms512m -Xmx1024m
栈:
存放信息:方法的局部变量、部分结果,并参与方法的调用和返回
栈分为,虚拟机栈和本地方法栈:两者区别不大,本地方法栈,主要是Native方法使用到内存空间,这部分由C语言实现。
每个线程都会有一个私有的栈空间
内存溢出时抛出:StackOverflowError 和OutOfMemoryError
设置该内存块大小:-Xss 1M
持久代:
存放信息:类的元数据,比如类的完整名称,父类的完整名称,类型修饰符,类的方法信息等等
设置该内存块大小:-XX:PermSize=256M -XX:MaxPermSize=512M
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-11 00:46:06