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

  • 相关阅读:
    golang学习之旅:使用go语言操作mysql数据库
    golang操作mysql使用总结
    win7环境搭建以太坊私链
    golang面试题--string操作
    如何获得微信小游戏源码
    [Egret]长按截屏分享、分享截屏图片、本地存储
    android 6.0导航栏 NavigationBar影响视图解决办法
    android设置透明状态栏
    理解Android中的注解与反射
    Butter Knife
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7096591.html
Copyright © 2011-2022 走看看