底层string
来源:互联网 发布:网络音乐盛典歌曲 编辑:程序博客网 时间:2024/06/16 12:17
常量池
Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)
通过命令 javap -verbose 查看class文件中 Constant pool 实现(看字节码)
常量池的内存分配 在 JDK6、7、8中有不同的实现:
1、JDK6及之前版本中,常量池的内存在永久代PermGen进行分配,所以常量池会受到PermGen内存大小的限制。
2、JDK7中,常量池的内存在Java堆上进行分配,意味着常量池不受固定大小的限制了。
3、JDK8中,虚拟机团队移除了永久代PermGen
常量池的内存分配6及之前在永久代PermGen,受PermGen内存大小的限制;7在堆上分配,大小不受限;8移除了永久代PermGen
字符串初始化 “javap -c” 命令查看字节码指令实现
字符串可以通过两种方式进行初始化:字面常量和String对象。字面常量初始化变量直接指向常量池里的字符串,表达式 “ja” + “va” 在编译期间会把结果值”java”直接赋值给变量。
通过new string()对象,使用char数组存储字符串构造对象,char数组指向常量池里的字符串,所以用==比较两种初始化方式,结果为false(地址不同)
String c = a + b 字符串变量的连接动作,在编译阶段会被转化成StringBuilder的append操作,变量c最终指向Java堆上新建String对象
final修饰的变量发生连接动作时,虚拟机会进行优化,将表达式结果直接赋值给目标变量
http://www.importnew.com/21711.html
string类中两个成员变量,final修饰的value[]数组,int hash(缓存string对象的哈希值)
StringBuffer成员变量value数组没有被final修饰
StringBuffer 的构造函数默认创建的大小为16个字符,尽量指定大小这样会减少扩容的次数,也就是会减少创建字符数组对象的次数和数据复制的次数
string stringBuffer两个类都是final修饰,不能被继承
http://blog.csdn.net/qh_java/article/details/46382265
http://www.cnblogs.com/dolphin0520/p/3778589.html
超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等
所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址
http://www.cnblogs.com/chenssy/p/3416195.html
public boolean equals(Object obj) {
return (this == obj);
}
public native int hashCode();对象的哈希码值
本地方法,它的实现与本地机器有关,这里我们暂且认为他返回的是对象存储的物理位置
对于一个对象而言,其hashCode过程就是一个简单的Hash算法的实现
ArrayList是List接口的可变数组的实现
private transient Object[] elementData;
ArrayList提供了三种方式的构造器,可以构造一个默认初始容量为10的空列表、构造一个指定初始容量的空列表以及构造一个包含指定collection的元素的列表
存储:set(),add(),addAll();
向数组中添加元素时,都要去检查添加后元素的个数是否会超出当前数组的长度,如果超出,数组将会进行扩容,以满足添加数据的需求。数组扩容通过一个公开的方法ensureCapacity(int minCapacity)来实现
数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的1.5倍。这种操作的代价是很高的.调用ensureCapacity方法来手动增加ArrayList实例的容量
读取:get();删除:remove()
Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)
通过命令 javap -verbose 查看class文件中 Constant pool 实现(看字节码)
常量池的内存分配 在 JDK6、7、8中有不同的实现:
1、JDK6及之前版本中,常量池的内存在永久代PermGen进行分配,所以常量池会受到PermGen内存大小的限制。
2、JDK7中,常量池的内存在Java堆上进行分配,意味着常量池不受固定大小的限制了。
3、JDK8中,虚拟机团队移除了永久代PermGen
常量池的内存分配6及之前在永久代PermGen,受PermGen内存大小的限制;7在堆上分配,大小不受限;8移除了永久代PermGen
字符串初始化 “javap -c” 命令查看字节码指令实现
字符串可以通过两种方式进行初始化:字面常量和String对象。字面常量初始化变量直接指向常量池里的字符串,表达式 “ja” + “va” 在编译期间会把结果值”java”直接赋值给变量。
通过new string()对象,使用char数组存储字符串构造对象,char数组指向常量池里的字符串,所以用==比较两种初始化方式,结果为false(地址不同)
String c = a + b 字符串变量的连接动作,在编译阶段会被转化成StringBuilder的append操作,变量c最终指向Java堆上新建String对象
final修饰的变量发生连接动作时,虚拟机会进行优化,将表达式结果直接赋值给目标变量
http://www.importnew.com/21711.html
string类中两个成员变量,final修饰的value[]数组,int hash(缓存string对象的哈希值)
StringBuffer成员变量value数组没有被final修饰
StringBuffer 的构造函数默认创建的大小为16个字符,尽量指定大小这样会减少扩容的次数,也就是会减少创建字符数组对象的次数和数据复制的次数
string stringBuffer两个类都是final修饰,不能被继承
http://blog.csdn.net/qh_java/article/details/46382265
http://www.cnblogs.com/dolphin0520/p/3778589.html
超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等
所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址
http://www.cnblogs.com/chenssy/p/3416195.html
public boolean equals(Object obj) {
return (this == obj);
}
public native int hashCode();对象的哈希码值
本地方法,它的实现与本地机器有关,这里我们暂且认为他返回的是对象存储的物理位置
对于一个对象而言,其hashCode过程就是一个简单的Hash算法的实现
ArrayList是List接口的可变数组的实现
private transient Object[] elementData;
ArrayList提供了三种方式的构造器,可以构造一个默认初始容量为10的空列表、构造一个指定初始容量的空列表以及构造一个包含指定collection的元素的列表
存储:set(),add(),addAll();
向数组中添加元素时,都要去检查添加后元素的个数是否会超出当前数组的长度,如果超出,数组将会进行扩容,以满足添加数据的需求。数组扩容通过一个公开的方法ensureCapacity(int minCapacity)来实现
数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的1.5倍。这种操作的代价是很高的.调用ensureCapacity方法来手动增加ArrayList实例的容量
读取:get();删除:remove()
阅读全文
0 0
- String底层
- 底层string
- Integer和String底层原理
- Java8 String的底层实现
- PHP - String字符串的底层实现原理
- String的compareTo方法底层代码
- String字符串拼接符 “+”底层原理
- 玩玩String的字符串拼接底层原理
- 底层
- 深入底层代码理解java中String、StringBuffer、StringBuilder
- Java源码之String.hashCode的底层实现
- Class.forName(String driverClassName)加载JDBC驱动程序时,底层都做了些什么???
- golang基础-数组、切片创建_内存_底层实现_修改值_拷贝_循环、string与切片
- 尊重底层
- AJAX底层
- spring底层
- 越来越底层
- 底层/汇编
- ORACLE百万记录SQL语句优化技巧
- nlp(一)语种检测
- Java多线程
- SpringCloud第五篇-Hystrix Dashboard
- html5访问历史记录案列
- 底层string
- 洛谷P1440 求m区间内的最小值
- 吴恩达deeplearning.ai课程系列笔记01
- CodeForces 883I
- c++的函数
- 04-树4 是否同一棵二叉搜索树(25 point(s))
- 目前最全的机器学习知识结构图(11月1日更新)
- 编程之美--第二章问题解答
- JavaScript中apply bind call的异同(重点讲解call方法)