在JVM中的String内存分配
来源:互联网 发布:group是什么域名 编辑:程序博客网 时间:2024/06/08 11:36
JVM内存模型在之前的文章已经做了相关阐述,这里就不列出来了,主要以代码的形式展现,前文章地址为 JVM内存模型和内存分配
public class StringMemoryTest { public static void change(String s, String s1) {//在change方法的栈中创建引用s和s1,并指向常量池中的常量 s = s1;//此时将引用s指向s1所指向的常量池中"world" s1 = s+s1;//此时并非在常量池而是在堆内存中创建"worldworld"对象,并将s1指向此堆内存地址 System.out.println("change(s,s1)---"+s+"---"+s1);//2:change(s,s1)---world---worldworld } public static void change(StringBuilder sb, StringBuilder sb1) {//在change方法的栈(和上面的change方法栈不同)中创建引用sb和sb1,并通过句柄的形式指向main方法栈中sb和sb1所指向的对象 sb = sb1;//将引用sb指向sb1所引用的对象"world" sb1.append(sb);//拼接字符串,此时引用sb1所指向的对象发生变化,变为"worldworld",此时外部main方法中的sb1和此方法中的sb均指向此堆内存地址, //此地址内容发生变化后,外部main方法中的sb1指向的内容也跟着变化 System.out.println("change(sb,sb1)---"+sb+"---"+sb1);//5:change(sb,sb1)---worldworld---worldworld } public static void main(String[] args) { //在main方法的栈中创建引用s和引用s1,此引用s和引用s1存放在栈(main方法的栈)中;编译时,在常量池中创建两个常量"hello"和"world",s和s1分别 //指向两个常量 String s = "hello"; String s1 = "world"; System.out.println(s+"---"+s1);//1:hello---world change(s,s1);//引用s和s1作为参数传递到change方法中 //change方法中的引用s,s1和main方法中的引用s,s1存放地址并不同,以下输出的是main方法栈中的s和s1,并没有发生变化,故代码3有以下输出 System.out.println(s+"---"+s1);//3:hello---world //以下两行代码将会在main方法栈中创建引用sb和sb1,并在堆内存中创建两个对象"hello"和"world",sb和sb1分别指向两个对象 StringBuilder sb = new StringBuilder("hello"); StringBuilder sb1 = new StringBuilder("world"); System.out.println(sb+"---"+sb1);//4:hello---world change(sb,sb1);//引用sb和sb1作为参数传递到change方法中 //main方法中的sb所指向的堆内存地址未发生变化,故仍为"hello",而change(sb,sb1)方法改变了main方法中sb1所指向的堆内存地址的内容,故代码6有以下输出 System.out.println(sb+"---"+sb1);//6:hello---worldworld } }
阅读全文
0 0
- 在JVM中的String内存分配
- JVM中的内存分配策略
- JAVA对象在JVM中内存分配
- JVM内存模型及String对象内存分配
- String在JVM中的细节
- Java String类型剖析及其JVM内存分配详解
- Java String类型剖析及其JVM内存分配详解
- Java String类型剖析及其JVM内存分配详解
- JVM内存中String分配详解(Java)
- JVM 对于STRING 产生的常量和 常量到底有没有在堆中 有内存分配 的说明
- JVM内存分配
- JVM内存分配设置
- JVM 内存分配详解
- 探索JVM 内存分配
- JVM最大分配内存
- 图解JVM 内存分配
- JVM内存分配机制
- JVM内存分配
- win8/win10+Hadoop2.8.1+jdk1.8部署(无需cygwin)
- 快速排序算法
- Java 并发编程(九)并发集合框架
- Struts2和Struts1的区别?
- 51nod 1007 正整数分组
- 在JVM中的String内存分配
- Ubuntu 17.04 连不上网
- PullToRefreshListView
- JavaScript选项卡
- L2-011. 玩转二叉树
- 关于LCA、树上倍增、树链剖分和LCT(填坑ing)
- 计算圆,长方形的面积
- 习题3.4
- Linux mount 和 umount 挂载和解挂载,文件覆盖丢失找回