zoukankan      html  css  js  c++  java
  • 方法区 永久代 元空间 常量池

    方法区:jvm标准

    永久代:hotspot实现 1.7

    元空间:hotspot实现 1.8

    首先,metaspace默认的最大值是整个机器的物理内存大小,所以metaspace不断扩张会导致java程序侵占系统可用内存,最终系统没有可用的内存;而永久区则有固定的默认大小,不会扩张到整个机器的可用内存。当分配的内存耗尽时,两者均会触发full gc,但不同的是永久区在full gc时,以堆内存回收时类似的机制去回收永久区中的类元数据(Class对象),只要是根引用无法到达的对象就可以回收掉,而metaspace判断类元数据是否可以回收,是根据加载这些类元数据的Classloader是否可以回收来判断的,只要Classloader不能回收,通过其加载的类元数据就不会被回收。

    原文链接:https://blog.csdn.net/xyghehehehe/article/details/78820135

    常量池

    1.6  - 永久代(方法区)

    1.7、1.8  - 堆

    但是即使是同样在堆中:

    public class StringConstancePool {
    public static void main(String[] args) {
    String str1 = new String("abc");
    String str2 = str1.intern();
    System.out.println(str1 == str2);
    }
    }
    以上程序的运行结果仍然是false,这时因为intern生成的str2所引用的字符串内容是在字符串常量池中,而通过new String方法生成的str1,该字符串对象是位于存放对象的Java堆中,二者的地址是不同的。

    原文链接:https://blog.csdn.net/MustangJy/article/details/88044964

  • 相关阅读:
    0909 谈谈我对操作系统的理解
    实验四 主存空间的分配和回收模拟
    12.03进程调度实验点评
    实验三进程调度实验
    实验二 作业调度模拟程序编写
    实验一 DOS命令解释程序的编写
    0909 随笔第一季
    实验四 主存空间的分配和回收模拟
    实验三 进程调度模拟实验
    实验二 作业调度模拟实验
  • 原文地址:https://www.cnblogs.com/silyvin/p/11543669.html
Copyright © 2011-2022 走看看