2.3 字符串常量池和String::intern()的讨论 2.3.1 Java堆中的内存泄漏与内存溢出 1、内存泄漏指垃圾收集器无法回收,导致该部分内存没办法得到利用,泄漏了,占用内存。 2、内存溢出就是指Java堆中创建的对象所占用的内存大小,已经超过了Java堆可扩展内存的最大范围,导致内存 ...
分类:
其他好文 时间:
2020-05-09 17:25:45
阅读次数:
70
2.2 HotSpot虚拟机中的对象 2.2.1 对象的创建 注意:这里所指的对象限于普通Java对象,不包括数组和Class对象等 当Java虚拟机遇到一条new的字节码指令时,会触发对象创建。 总结1 HotSpot中的对象创建过程: (1)首先将去检查这个指令的参数是否能在常量池( Java方 ...
分类:
其他好文 时间:
2020-05-09 16:43:18
阅读次数:
66
一、常量池与串池 1、书写代码: public class test1804 { public static void main(String[] args) { String string1="a"; String string2="b"; String string3="ab"; } } 2、查 ...
分类:
其他好文 时间:
2020-05-08 20:12:04
阅读次数:
73
Hotspot虚拟机在JDK8时的JVM内存模型 1.将虚拟机栈和本地方法栈合二为一 2.移除永久代,引入元空间来实现方法区 3.将运行时常量池加入堆空间 ...
分类:
其他好文 时间:
2020-05-06 13:55:16
阅读次数:
55
1. 是不是只有java编译器才可以将java转为class 字节码文件? 不是的,jRuby/Groovy/Scala/Jython 都是可以编译成字节码文件的。 2. 计算机是以010101的方式执行的。 3. 什么是u1,u2,u4,u8 u1: 一个字节; u2: 二个字节; u4: 4个字 ...
分类:
其他好文 时间:
2020-05-05 11:04:18
阅读次数:
55
栈帧是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址信息。 局部变量表 是一组变量值的存储空间,用于存放方法参数和方法内部定义的局部变量。 局部变量表的容量以变量槽(Variable Slot)为最小单位。 操作数栈 操作数栈,也称操 ...
分类:
其他好文 时间:
2020-05-05 10:51:59
阅读次数:
68
访问标志的位置:在常量池结束之后的两个字节(16位)表示访问标志access_flags。 访问标志的作用:用于标识类或者接口层次的访问信息;比如该Class是类还是接口,是否为public类型、是否为abstract类型、是否是final类型等等。 访问标志的类型:参考博客《Java虚拟机原理图解 ...
分类:
其他好文 时间:
2020-05-04 17:49:06
阅读次数:
82
前言 对常量池的理解之前,需要熟悉的是一些术语: 字面量 百度也给了一个例子: 这个object c 的例子,容易理解。 正文 JVM常量池主要分为Class文件常量池、运行时常量池,全局字符串常量池,以及基本类型包装类对象常量池。 我在网上找了一个例子: 编译后: 下面只截取了一部分,常量池: 好 ...
分类:
编程语言 时间:
2020-05-04 11:51:24
阅读次数:
89
String、StringBuffer、StringBuilder String类是用的 final char[] 保存的字符串,故String对象是不可变的,用+拼接字符串,就是生成的一个新的String对象。 String s1 = "abc"; 是放在字符串常量池中,如再创建一个String ...
分类:
编程语言 时间:
2020-05-02 16:43:24
阅读次数:
68
String 一、 底层解析 1. JVM底层 在JVM底层中,声明的String变量的地址存储在栈区,而后面的赋值,也就是字符串常量池,在方法区。方法区的常量不重复。 当对字符串进行 重新赋值 ,对现有字符串进行 连接 操作,调用String的replace方法 修改 指定字符或字符串时,都需要重 ...
分类:
其他好文 时间:
2020-05-01 01:23:01
阅读次数:
72