一、两种赋值方式的比较1、直接赋值法:String s1="abc";这种赋值方法用的最多,因为它可能不需要创建对象,或者只创建一次。它首先会判断字符串常量池有没有存在字符串abc,如果没有存在,则将其保存在常量池中,并用s1指向该对象。如果已经存在了此字符串,则不需要再次创建对象。比如:Strin...
分类:
编程语言 时间:
2015-07-24 23:58:06
阅读次数:
285
在JAVA中,有六个不同的地方可以存储数据:
1. 寄存器(register)。
这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制)。
2. 堆栈(...
分类:
编程语言 时间:
2015-07-19 13:34:15
阅读次数:
200
当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做【加载】。加载完成之后,我们就可以进行一系列的运行前准备工作了,比如: 为类静态变量开辟空间,将常量池存放在方法区内存中并实现常量池地址解析,初始...
分类:
其他好文 时间:
2015-07-17 18:19:00
阅读次数:
103
今天My partner问我一个让他头疼的Java question,求输出结果:/** * * @author DreamSea 2011-11-19 */ public class IntegerTest { public static void main(String[] args) { ob...
分类:
编程语言 时间:
2015-07-15 22:29:01
阅读次数:
128
概述
运行时数据区域
程序计数器
Java虚拟机栈
本地方法栈
Java堆
方法区
运行时常量池
直接内存
hotspot虚拟机对象探秘
对象的创建
对象的内存布局
对象的访问定位概述
Java程序员不需要自己去手动释放内存,而C、C++程序员就需要自己去操作了,原因是Java虚拟机帮我们完成了这个动作,所以我们也要了解jvm的机制,这样出问题后才会知道它到底是什么情况。本章介绍JVM内存各个区...
分类:
编程语言 时间:
2015-07-14 17:59:21
阅读次数:
163
什么是字符串常量池?在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象:使用new运算符。例如:1String str = new String("Hello");使用字符串常量或者常量表达式。例如:12String str="Hello"; //(字...
分类:
其他好文 时间:
2015-07-13 13:39:02
阅读次数:
202
栈、堆、常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,详细讲解Java内存分配方面的知识。
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:
◆...
分类:
编程语言 时间:
2015-07-13 07:49:53
阅读次数:
189
JVM内存区域模型
1.方法区
也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。
运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常...
分类:
编程语言 时间:
2015-07-12 23:21:22
阅读次数:
268
java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 ...
分类:
编程语言 时间:
2015-07-09 06:12:43
阅读次数:
123