由于运行时常量池属于方法区的一部分,因此两个区域放在一块执行。 String.intern()是一个Native方法,它的作用是如果字符串常量池中已经包含了此String对象的字符串,则返回代表池中这个字符串的String对象;否则将此String对象包含的字符串添加到常量池中,并且返回此Strin ...
分类:
其他好文 时间:
2019-03-29 00:46:45
阅读次数:
208
对象创建 对象创建 虚拟机遇到一个new指令时,首先去,检查这个指令的参数是否在常量池中定位到一个雷的符号引用,并且检查这个符号引用代表的雷是否已被加载、解析、初始化过。 在类加载检查通过后,虚拟机将会为新对象分配内存,对象所需要的内存大小在加载后可以确定,为对象分配内存的任务就是把一块确定大小的内 ...
分类:
其他好文 时间:
2019-03-28 00:31:07
阅读次数:
143
String详解 字符创建方式 字符串创建有两种方式 创建过程解析 方式一创建时,先解析字符串常量"myString",它会在常量池里面的一个字符串常量列表中查找,如果没有找到,在堆里面创建一个包含字符序列(myString)的String对象s1,然后把这个String对象的字符序列和引用作为名值 ...
分类:
其他好文 时间:
2019-03-26 19:36:08
阅读次数:
166
涉及内容:构造方法,static关键字,字符串 一.构造方法 二.Static关键字 三.字符串 1.==和.equals的区别: ==直接比较的是变量的值,.equals()方法比较的是地址上面具体的值 intern()方法:内容与此字符串相同,但一定取自具有唯一字符串的常量池。 2.toStri ...
分类:
其他好文 时间:
2019-03-23 11:50:01
阅读次数:
141
此篇是上一篇文章Java内存溢出异常(上)的续篇,没有看过的同学,可以先看一下上篇。本篇文章将介绍剩余的两个溢出异常:方法区和运行时常量池溢出。 ...
分类:
编程语言 时间:
2019-03-21 10:28:55
阅读次数:
189
1、通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象区别? 通过构造方法创建字符串对象是在堆内存。 直接赋值方式创建对象是在方法区的常量池。 ==: 基本数据类型,比较的是基本数据类型的值是否相同。 引用数据类型,比较的是引用数据类型的地址值是否相同。 public class Strin ...
分类:
其他好文 时间:
2019-03-19 01:08:32
阅读次数:
179
1. 使用javap verbose 命令分析一个字节码文件时,将会分析该字节码文件的魔数、版本号、 常量池、类的构造方法、类中的方法信息、类变量与成员变量等信息。 2. 魔数:所有的.class字节码文件的前4个字节都是魔数,魔数值为固定值:OxCAFEBABE 3. 魔数之后的4个字节为版本信息 ...
分类:
编程语言 时间:
2019-03-17 13:48:26
阅读次数:
193
首先贴上源码中的注释 在一个String类上调用这个方法的时候如果常量池中存在和这个String对象相同的对象的时候,直接返回常量池中的常量,如果常量池中不存在这个对象,就直接将其将其加入常量池,并且返回一个引用。 intern()方法直接从常量池中取值,这样会比直接从堆中取值快。 执行“==”效率 ...
分类:
其他好文 时间:
2019-03-17 12:18:53
阅读次数:
169
本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲解。 写在前面(常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位 ...
分类:
其他好文 时间:
2019-03-13 10:38:16
阅读次数:
211
jvm内存模型 1.执行过程 Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间 ...
分类:
其他好文 时间:
2019-03-08 16:58:44
阅读次数:
206