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

  • 相关阅读:
    js备忘录3
    js备忘录2
    js备忘录1
    Java-URLEncoder.encode 什么时候才是必须的
    Oracle中的SQL分页查询原理和方法详解
    servlet 和 threadlocal 与 web容器(理解threadlocal)
    技术汇总:第十二章:技术总览
    MongoDB :第五章:MongoDB 插入更新删除查询文档
    MongoDB :第六章:Java程序操作MongoDB
    MongoDB :第二章:系统归纳
  • 原文地址:https://www.cnblogs.com/silyvin/p/11543669.html
Copyright © 2011-2022 走看看