JVM启动流程 JVM基本结构 PC寄存器 –-每个线程拥有一个PC寄存器 –-在线程创建时 创建 –-指向下一条指令的地址 –-执行本地方法时,PC的值为undefined 方法区 –-保存装载的类信息 ?类型的常量池 ?字段,方法信息 ?方法字节码 –-通常和永久区(Perm)关联在一起 方法区 ...
分类:
其他好文 时间:
2016-03-28 02:14:35
阅读次数:
248
首先,‘abc’和‘def’是两个单独的对象,编译的时候会拜放到常量池中。然后执行String str = ‘abc’将str‘abc’指向这个常量,然后str = str + ‘def’会重新创建一个‘abcdef’的对象,并将str指向这个对象。所以以上的代码中,我们共创建了3个对象。 上面的代
分类:
编程语言 时间:
2016-03-22 15:01:44
阅读次数:
226
字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量。 例1: “==” 比较两个对象是否引用同一实例 以上的代码运行结果为true。 原因分析:当运行到代码String str1="abcd";处,JAVA虚拟机会先检查字符串常量池中是有相同的字符串,如果有,则返回该对象的引用,否则
分类:
编程语言 时间:
2016-03-19 19:42:02
阅读次数:
289
String类初始化后是不可变的(immutable),首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点。从中可以看到: 在执行到双引号包含字符串的语句时,如String a = "123",JVM会先到常量池里查找,如果有的话返回常量池里的这个实例的引用,否则
分类:
编程语言 时间:
2016-03-19 14:40:58
阅读次数:
246
一.准备知识 Java中变量分为基本数据类型和引用类型,前者分配在栈内,出了作用域就自动释放,后者分配在堆内或者常量池(比如字符串常量和基本数据类型常量),需要new出来。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。堆内存用于存放由new创建的对象和数组。数组和对象在没
分类:
编程语言 时间:
2016-03-19 12:49:50
阅读次数:
234
当虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完成后,便课完全确定,为对象
分类:
其他好文 时间:
2016-03-17 00:04:32
阅读次数:
519
在jvm规范中,每个类型都有自己的常量池。常量池是某类型所用常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型、字段、方法的符号引用。之所以是符号引用而不是像c语言那样,编译时直接指定其他类型,是因为java是动态绑定的,只有在运行时根据某些规则才能确定具体依赖的类型实例,这正是
分类:
其他好文 时间:
2016-03-16 22:43:25
阅读次数:
240
原文:http://blog.csdn.net/pwair/article/details/654284 常量池(constant pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 Java确保一个字符串常量只
分类:
其他好文 时间:
2016-03-16 19:13:17
阅读次数:
206
1、在JDK1.6(HotSpot虚拟机)及之前,运行时常量池(属于方法区的一部分)是永久代的,而在JDK1.7之后运行时常量池(里面用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池当中存放)已经从永久代(Permanent Generation)移出。(问:
分类:
其他好文 时间:
2016-03-10 00:07:09
阅读次数:
152
关于String的各种==和equals,有的人搞不懂 简而言之 String s1 = "Hello" 声明的是一个常量,会在常量池里。 String s2 = new String("Hello"),声明的是一个对象,在内存里会有单独的空间。 ==比较的是String的地址 equals比较的是
分类:
编程语言 时间:
2016-03-09 00:03:54
阅读次数:
230