zoukankan      html  css  js  c++  java
  • string字符串常量池在内存中的位置

    这里仅仅是举个简单的样例说明字符串常量池在内存中的位置。

        闲言少叙,直接上代码。

     

    Java代码  收藏代码
    1. <span style="font-size: large;">import java.util.ArrayList;  
    2.   
    3. public class Test {  
    4.   
    5.     public static void main(String[] args) {  
    6.         String str = "abc";  
    7.         char[] array = {'a''b''c'};  
    8.         String str2 = new String(array);  
    9.         //使用intern()将str2字符串内容放入常量池  
    10.         str2 = str2.intern();  
    11.         //这个比較用来说明字符串字面常量和我们使用intern处理后的字符串是在同一个地方  
    12.         System.out.println(str == str2);  
    13.         //那好,以下我们就拼命的intern吧  
    14.         ArrayList<String> list = new ArrayList<String>();  
    15.         for (int i = 0; i < 10000000; i++) {  
    16.             String temp = String.valueOf(i).intern();  
    17.             list.add(temp);  
    18.         }  
    19.     }  
    20. }</span>  

     

    运行一下,会怎么样?

    true
    Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
            at java.lang.String.intern(Native Method)
            at Test.main(Test.java:16)
    Java Result: 1  

     

         异常信息告诉我们PermGen 满了。奥,我知道字符串常量池在哪了。PermGen就是jvm规范中所谓的方法区。

         这里偷懒了一下,仅仅是指定了非常大的数10000000让PermGen 溢出。只是时间可能长点。勤快的人还是自己指定java执行的内存比較好,稍小点就能验证。

  • 相关阅读:
    win7,win8,win8.1修复IE浏览器的建议
    推荐给.net程序员的学习网站
    OLTP与OLAP
    profiler列名的具体意义
    sp_reset_connection
    IDENTITY
    【读书笔记】Android Handler和Looper流程
    Android视频/音频缓存框架AndroidVideoCache
    Android KeyStore格式转换工具
    使用Android Studio开发NDK
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7096591.html
Copyright © 2011-2022 走看看