1.对象的创建 首先虚拟机遇到一条new指令时,将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可 ...
分类:
编程语言 时间:
2018-08-09 14:06:04
阅读次数:
147
一、String的解析 1.String的含义 ①String是不可以被继承的,String类是final类,String类是由char[]数组来存储字符串。 ②String是不可变的字符序列,如果存储abc则在字符串常量池中开辟长度固定为3的字符数组,无论怎么改变均会产生新的实例。 2.Strin ...
分类:
编程语言 时间:
2018-08-09 00:29:52
阅读次数:
202
运行时数据区域 (1)程序计数器(program counter register) 一块较小的内存空间 当前线程所执行的字节码的行号指示器,字节码解释器在工作的时候就是通过改变程序计数器的值来选取下一跳要执行的指令 多线程环境下,线程轮流切换执行,程序计数器保证线程切换之后能恢复到正确的位置 每个 ...
分类:
编程语言 时间:
2018-08-07 17:30:05
阅读次数:
198
编写高质量代码:改善Java程序的151个建议 [52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序中最经常使用的类型),于是就设计了一个字符串池(也叫作字符串常量池,String pool或String ...
分类:
编程语言 时间:
2018-08-07 10:21:37
阅读次数:
143
注意:在JDK1.8运行常量池移到了堆中,元空间取代了永久代。元空间并不在虚拟机中,而是使用本地内存。 内存结构 程序计数器 当前线程所执行的字节码的行号指示器,保证线程切换后能恢复到原来的执行位置。 栈 线程私有,每个线程对应一个Java虚拟机栈,其生命周期与线程同进同退。每个Java方法在被调用 ...
分类:
其他好文 时间:
2018-08-04 23:25:38
阅读次数:
247
?数据池(常量池): 把我们使?过的值存储在?数据池中.供其他的变量使?.?数据池给数字和字符串使?, 其他数据类型不存在.对于数字: -5~256是会被加到?数据池中的. 每次使?都是同?个对象.对于字符串: ...
分类:
其他好文 时间:
2018-08-02 19:11:39
阅读次数:
127
以下是从网上整理出的资料,不同作者对某些具体描述有略微差别,有的具体描述可能会存在不准确的情况,但结论是一致的。 一、String equals比较值,==比较引用,我们主要关注引用的比较。 1、两种方式创建String的过程 对于 String s1="abc"; 这种方式,如果常量池中已经存在字 ...
分类:
其他好文 时间:
2018-07-29 15:13:52
阅读次数:
220
因此,java中的字符串引用存放在栈中,如果在编译期已经定义好,则存放在常量池中,如果在运行期间出来的对象则存储在堆中,对于通过equals方法比较相等的字符串在字符常量池中只有一个,在堆中可能有多个。 this.value=Arrays.copyOf(values, values.length); ...
分类:
编程语言 时间:
2018-07-26 15:03:50
阅读次数:
242
String的不可变,String类为什么要被设计为是final的,Java String的可变性,Byte,Short,Integer,Long,Double,Float,Character,Boolean 八种基本数据的包装类,enum枚举类型 不变性分析 ...
分类:
编程语言 时间:
2018-07-26 10:48:45
阅读次数:
175
String内存位置说明 显式的String常量 第一句代码执行后就在常量池中创建了一个值为holten的String对象; 第二句执行时,因为常量池中存在holten所以就不再创建新的String对象了。 此时该字符串的引用在虚拟机栈里面。 String对象 Class被加载时就在常量池中创建了一 ...
分类:
编程语言 时间:
2018-07-25 01:06:54
阅读次数:
166