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执行的内存比較好,稍小点就能验证。

  • 相关阅读:
    View onMeasure方法介绍
    控件的3个状态
    多个Activity之间的跳转(1)
    7种形式的Android Dialog使用举例(下)
    调用摄像头采集图像
    读取播放视频
    MATLAB
    下载数据CSV文件格式
    生成数据
    java中给当前时间添加一小时
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7096591.html
Copyright © 2011-2022 走看看