java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 ...
分类:
编程语言 时间:
2015-07-09 00:32:43
阅读次数:
144
方法区永久代,共享。类信息,常量,static变量,JIT编译后的代码。运行时常量池:字面量,符号引用。堆所有对象(新生代,老年代)虚拟机栈线程私有。表示方法执行的内存模型。【局部变量表】本地方法栈程序计数器字节码行号。线程私有。【Objectobj=newObject();】——Objectobj...
分类:
其他好文 时间:
2015-07-08 22:13:07
阅读次数:
138
Java虚拟机具有一个堆,是运行时的数据区域,所有类实例和数组内存均从此处分配。堆是在java虚拟机启动时创建的。堆是留给开发人员用的内存区域。非堆就是JVM留给自己用的(方法区,JVM内部处理或优化所需的内存,运行时的常量池,字段方法数据等)。JVM初始分配的内存由-Xms指定,默认为物理内存的1...
分类:
编程语言 时间:
2015-07-06 21:40:24
阅读次数:
138
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm参数 -XX:MaxPermSize=256m来配置这部分堆内存的大小。在eclipse中如何配置t...
分类:
编程语言 时间:
2015-07-01 22:05:07
阅读次数:
128
1、String类定义的变量是不可变得eg:Strings0=”kvill”;Strings1=newString("kvill");为什么要设计为不可变:1.1字符串常量池的需要1.2允许String对象缓存HashCodeJava中String对象的哈希码被频繁地使用,比如在hashMap等容器中。字符串不变性保证了hash码的唯一性,因此可以放..
分类:
编程语言 时间:
2015-07-01 18:48:54
阅读次数:
167
ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式。然而这两种实现其实存在着一些...
分类:
编程语言 时间:
2015-06-30 08:58:44
阅读次数:
182
问题:比如有时候进行JSON数据网络传输,客户端我们用long来表达,但服务端我们用了Long,有时候我们希望Long为null(比如有些自增ID不能设置ID值),但总是有值,搞了半天莫名其妙。
解决:将客户端的long改为Long。
原因:原来是我们客户端并没有设置ID,但是由于使用了long,这样默认值就是0,服务端解析的时候就成了0。
分析:long类型如果是局部变量则编译器要求初始化...
分类:
编程语言 时间:
2015-06-25 14:13:19
阅读次数:
209
Java 内存分配:1. 寄存器我们在程序中无法控制2. 栈存放基本类型的变量数据,局部变量,和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆存放用new产生的对象,数组。为了给垃圾回收器使用,...
分类:
编程语言 时间:
2015-06-24 14:21:11
阅读次数:
173
Java中的String与常量池string是java中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。string是java中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。下面介绍java中的...
分类:
其他好文 时间:
2015-06-21 21:04:57
阅读次数:
119
String类型是字符串类型。。字符串一旦创建不可以在改变。“abc”字符串对象一旦创建,不可以再改成“abcd”提升字符串的访问效率:在程序中使用了“缓存”技术。所以在java中所有使用“双引号”括起来的字符串都会在“字符串常量池”中创建一份。字符串常量池在方法区中被存储..
分类:
编程语言 时间:
2015-06-17 02:04:37
阅读次数:
120