首先说一下Java内存分配。物理的内存是线性结构,并不存在拥有不同功能的不同区域,编译器(或者JVM)为了更高效地处理数据,会用不同的算法把内存分为各种区域,不同的区域拥有各自的特性,Java中,内存可以分为栈,堆,静态域和常量池等。 不同内存区域的功能和特点: 栈区:存放局部变量(变量名,对象的引 ...
分类:
其他好文 时间:
2016-08-19 13:00:08
阅读次数:
183
运行时数据区域 1程序计数器 2 Java虚拟机栈 3本地方法栈 4 Java堆 5 方法区 6运行时常量池直接内存 下面来分别说下这个概念 1程序计数器:(program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器工作时就 ...
分类:
编程语言 时间:
2016-08-11 01:00:58
阅读次数:
249
day12面试题 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); //true 比较的是地址,如果常量池中已经有了"abc"字符串,那么就直接将该字符串地址给s2而不是新建 System.out.println( ...
分类:
编程语言 时间:
2016-08-10 21:10:58
阅读次数:
151
String 常量池概念,当String 对象是new 出来的并传参如:String s = new String("hello");//其在堆栈中开辟地址,引用地址在栈中,值存于堆; 当String 传值为: String s = new String;s="hello";//其在常量池中开辟地址 ...
分类:
编程语言 时间:
2016-08-10 12:32:05
阅读次数:
149
http://droidyue.com/blog/2014/12/21/string-literal-pool-in-java/index.html ...
分类:
编程语言 时间:
2016-08-06 18:49:47
阅读次数:
200
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm参数 -XX:MaxPermSize=256m来配置这部分堆内存的大小。 在eclipse中如何配置 ...
分类:
编程语言 时间:
2016-08-05 15:49:25
阅读次数:
152
.01 string类特点
String类的特点:
字符串对象一旦被初始化就不可以被改变。
面试题
String s = “abc”;
String s1 = NEW String (“abc”);
System.out.println(s==s1); 输出false
表示这两个字符串地址是不是相等的,为什么?
答:第一个是在字符串常量池中创建了abc字符串并且赋给了引用型变...
分类:
编程语言 时间:
2016-08-05 14:04:37
阅读次数:
271
String对象是java语言中重要的数据类型,但是不是基本数据类型。相对于c语言的char java做了一些封装和延伸。 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一个拷贝。当一个字符串反复出现时,这个技术可以大幅度节省内存空间。 以上代码显示 str1 和str2 ...
分类:
其他好文 时间:
2016-08-04 10:28:49
阅读次数:
190
一, Java有两种创建字符串的方式, 用双引号创建和用new来创建。这两种方式创建出来的String存储的位置上不同的。当使用双引号方式时,相当于显式的声明了字符串的值(字面值),所以是作为一个常量,存储在方法区的常量池中。使用new方式来创建String时,JVM会在堆上分配一块区域,存储一个S ...
分类:
编程语言 时间:
2016-08-02 15:09:18
阅读次数:
142
Java中的字面常量(区别于final创建的有名常量)通常会保存在常量池中,常量池可以理解为像堆一样的内存区域。但是常量池有一个特性就是,如果常量池中已存在该常量将不会再次为该常量开辟内存 还是看个程序: 输出结果为: s1所引用的字符串对象是字面常量,会存储在常量池, s2所引用的字符串对象也是字 ...
分类:
编程语言 时间:
2016-07-24 20:57:24
阅读次数:
202