`
ZangXT
  • 浏览: 116376 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

小例子:如何说明String常量池的位置

阅读更多

    以前批过《关于Java堆与栈的思考》这个帖子,具体内容见http://zangxt.iteye.com/blog/440330

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

    闲言少叙,直接上代码。

 

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {
        String str = "abc";
        char[] array = {'a', 'b', 'c'};
        String str2 = new String(array);
        //使用intern()将str2字符串内容放入常量池
        str2 = str2.intern();
        //这个比较用来说明字符串字面常量和我们使用intern处理后的字符串是在同一个地方
        System.out.println(str == str2);
        //那好,下面我们就拼命的intern吧
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10000000; i++) {
            String temp = String.valueOf(i).intern();
            list.add(temp);
        }
    }
}

 

执行一下,会怎么样?

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

12
0
分享到:
评论
6 楼 supertangcugu 2017-07-13  
senninha 写道
然鹅。。jdk1.8已经把这货移到了heap区?
只有把-Xmx调到很小才会出现heap overflow....

确实,jdk8的jvm模型已经变了
5 楼 senninha 2017-05-09  
然鹅。。jdk1.8已经把这货移到了heap区?
只有把-Xmx调到很小才会出现heap overflow....
4 楼 onada1108 2017-03-27  
还有你是基于jdk那个版本
3 楼 onada1108 2017-03-27  
我想问下,你这个方法跑啦多长时间
2 楼 chembo 2015-11-06  
1 楼 francis.xjl 2010-11-19  
不错~这个方法赞~

相关推荐

    String int 字符串常量池 包装类型 函数参数 值传递引用传递 的 内存分配例子——源码

    String int 字符串常量池 包装类型 函数参数 值传递引用传递 的 内存分配例子——源码 public static void fun_ref (Ref_test ref_out){ Ref_test ref_in=new Ref_test(); ref_in.s1="in"; //ref_out.s1=...

    [java]读书笔记整理:一切都是对象

    在这一小段代码中,我们似乎无法再访问这个对象,因为对它唯一的引用已超过了作用域的范围。[后续在说,在程序执行过程中,怎样传递和赋值对象引用]。 事实证明,由new创建的对象,只要你需要,就会一直保留下去。...

    Java优化编程(第2版)

    4.2 string类与性能优化 4.2.1 字符串累加与性能优化 4.2.2 字符串的length()方法与性能优化 4.2.3 tochararray()方法与性能优化 4.2.4 字符串转化为数字 4.3 系统i/o类 4.3.1 java语言中输入/输出流 4.3.2 通过系统...

    亮剑.NET深入体验与实战精要2

    读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例...

    亮剑.NET深入体验与实战精要3

    读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集实用性、思想性、趣味性于一体,内容共分为技术基础总结、系统架构设计思想及项目实战解析三部分,随书所附光盘收录大量实例...

    Java开发技术大全 电子版

    2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 2.3.8变量赋初值33 2.3.9变量的作用域34 2.3.10数据类型转换34 2.4运算符与表达式37 2.4.1算术运算符...

    WAP 无线应用协议

    6.7.4 常量池 158 6.7.5 编译指示池 160 6.7.6 函数池 162 6.7.7 指标限度 163 6.8 WMLScript指令集 164 6.8.1 约定规则 164 6.8.2 致命的错误 164 6.8.3 优化 164 6.8.4 符号约定 165 6.8.5 指令 165 6.9 字节码...

    Java范例开发大全 (源程序)

     实例11 常量与变量 18  实例12 各种进制的转换 19  实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句 26  实例14 判断输入的年份是否为闰年 26  实例...

    java范例开发大全(pdf&源码)

    实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 ...

    java范例开发大全源代码

     实例11 常量与变量 18  实例12 各种进制的转换 19  实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句 26  实例14 判断输入的年份是否为闰年 26 ...

    java范例开发大全

    实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 ...

    Java范例开发大全(全书源程序)

    实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 ...

    JAVA程序设计教程

    内容小结.........................................................................................................................12 思考与练习............................................................

Global site tag (gtag.js) - Google Analytics