zoukankan      html  css  js  c++  java
  • String的intern方法的副作用

    以下的测试环境是

    java version "1.6.0_29"
    Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
    Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)

    import java.util.Random;

    public class StringInternPermGenDemo{
        public static void main(String[] args) throws Exception{
            Random random = new Random();
            while(true){
                String temp = "tempoary test for PermGen Out of Memory error" + random.nextInt();
                temp.intern();
                Thread.sleep(1000);
        }
    }

    编译

    javac StringInternPermGenDemo.java

    运行

    java –XX:PermSize=2M –XX:MaxPermSize=2M StringInternPermGenDemo

    运行一段时间后出现

    image

    通过VisualVM查看PermGen的增长情况

    image

    结论

    调用String的intern方法后,JVM会把该String放到PermGen内存区域中(也就是动态地放到常量池中--我忘记这句话的出处了,知道的告诉我一下),而PermGen内存区域是用于存放方法的永久区,所以不会被垃圾回收,最终导致PermGen的内存溢出。

  • 相关阅读:
    数据库子查询
    数据库简介
    MySql数据类型
    Jquery与js简单对比
    JS-对象
    JS-DOM
    JS-数组
    JS-函数
    JS-json
    JS-类型相关
  • 原文地址:https://www.cnblogs.com/cando/p/2303283.html
Copyright © 2011-2022 走看看