标签:内存 永久 lan 地方 perm 回收 rac nat 本地
记录字节码指令地址,占用空间很小,基本无异常抛出
native方法区
所有线程共享,主要存储类的信息,常量池,方法数据,方法代码。
JVM所有线程共享,所有对象和数组都在堆上进行分配,这部分内存可通过GC回收,申请不到内存空间会抛出OutOfMemoryError
线程私有,随线程的创建而创建,栈里面存放“栈帧”,每个方法会存放一个栈帧,栈帧中存放局部变量表、操作数栈、方法出口。会抛出StackOverflowError
,OutOfMemoryError
常见的异常java.lang.OutOfMemoryError: PermGen space
,其实指的是方法区,但是方法区和PermGen又有本质区别。前者是JVM规范,后者是JVM规范的一种实现,并且只有HotSpot才有PermGen space
。
JDK1.8已经用Metaspace取代PermGen
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不给Metaspace与PermGen最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此元数据大小仅受本地内存限制
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整;如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize.最大空间默认没有限制。
1.字符串存在永久代中,容易出现性能问题和内存溢出。
2.类及方法的信息等比较难确定大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大容易导致老年代溢出。
3.永久代会为GC带来不必要的复杂度,并且回收效率偏低。
4.Oracle 可能会将HotSpot 与 JRockit 合二为一。
标签:内存 永久 lan 地方 perm 回收 rac nat 本地
原文地址:https://www.cnblogs.com/chenheblog/p/11231426.html