课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员学习Java编程开发语言的时候都需要掌握的一些基础知识等内容,而本文运城达内小编就带领大家继续学习一下,Java编程内存区域类型与管理方法。
元空间(MetaSpace)与永久代(PermGen)的区别
元空间和永久代均是方法区的实现,存放class相关信息,method和field。方法区是一种JVM的规范。
JDK7之后,原先位于方法区的字符串常量池移动到了Java堆中,JDK8中元空间替代了永久代。元空间使用本地内存,而永久代使用的是jvm的内存
java.lang.OutOfMemoryError:PermGenspace不复存在,解决了空间不足的问题。原则上,本地空间多大,元空间就可以多大。但是jvm会根据程序需要动态调整所需空间大小。
Java堆(Heap)
类实例和数组存储在堆内存中。堆内存也称为共享内存。因为这是多个线程将共享相同数据的地方。
Java堆(JavaHeap)的作用就是存放对象实例,几乎所有的对象实例都是在这里分配内存。
Java堆是垃圾收集的主要区域(因此也被叫做"GC堆")。现代的垃圾收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的垃圾回收算法。
方法区
方法区(MethodArea)也被称为永久代。方法区用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
对这块区域进行垃圾回收的主要目标是对常量池的回收和对类的卸载,但是一般比较难实现。
运行时常量池
运行时常量池(RuntimeConstantPool)是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息,还有一项信息是常量池(ConstantPoolTable),用于存放编译器生成的各种字面量和符号引用,这部分内容会在类加载后被放入这个区域。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。