博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之内存分析和String对象
阅读量:6874 次
发布时间:2019-06-26

本文共 2005 字,大约阅读时间需要 6 分钟。

  Java中内存分析:

  栈(Stack) : 存放基本类型的变量数据和对象的
引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。
  堆(heap): 存放所有new出来的对象。
  常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float、int等)。另外,可以存储不经常改变的东西 (public static final)。常量池中的数据可以共享。
  静态存储:存放静态成员(static定义的)。

  

1)

  String a = "abc";①   String b = "abc";②
  分析:
  ①代码执行后在常量池(constant pool)中创建了一个值为abc的String对象,②执行时,因为常量池中存在"abc"所以就不再创建新的String对象了。
 
2)
  String   c   =   new   String("xyz");①   String   d   =   new   String("xyz");②
  分析:①Class被加载时,"xyz"被作为常量读入,在常量池(constant pool)里创建了一个共享的值为"xyz"的String对象;然后当调用到new String("xyz")的时候,会在堆(heap)里创建这个new   String("xyz")对象;②由于常量池(constant pool)中存在"xyz"所以不再创建"xyz",然后创建新的new String("xyz")。
3)
  String   s1   =   new   String("xyz");     //创建二个对象(常量池和栈中),一个引用   String   s2   =   new   String("xyz");     //创建一个对象(栈中),并且以后每执行一次创建一个对象,一个引用   String   s3   =   "xyz";     //创建一个对象(常量池中),一个引用     String   s4   =   "xyz";     //不创建对象(共享上次常量池中的数据),只是创建一个新的引用
4)
public class TestStr { public static void main(String[] args) { // 以下两条语句创建了1个对象。"凤山"存储在字符串常量池中     String str1 = "凤山";     String str2 = "凤山";     System.out.println(str1==str2);//true //以下两条语句创建了3个对象。"天峨",存储在字符串常量池中,两个new String()对象存储在堆内存中     String str3 = new String("天峨");     String str4 = new String("天峨");     System.out.println(str3==str4);//false //以下两条语句创建了1个对象。9是存储在栈内存中     int i = 9; int j = 9;     System.out.println(i==j);//true      //由于没有了装箱,以下两条语句创建了2个对象。两个1对象存储在堆内存中     Integer l1 = new Integer(1);     Integer k1 = new Integer(1);     System.out.println(l1==k1);//false
  //以下两条语句创建了1个对象。1对象存储在栈内存中。自动装箱时对于值从127之间的值,使用一个实例。     Integer l = 20;//装箱     Integer k = 20;//装箱     System.out.println(l==k);//true
//以下两条语句创建了2个对象。i1,i2变量存储在栈内存中,两个256对象存储在堆内存中     Integer i1 = 256;     Integer i2 = 256;     System.out.println(i1==i2);//false   } }

---------------------------------------------------------------------

PS: 欢迎关注公众号"Devin说",会不定期更新Java相关技术知识。

--------------------------------------------------------------------

转载地址:http://typfl.baihongyu.com/

你可能感兴趣的文章
大数据学习贴(1)-环境搭建
查看>>
Windows Server入门系列32 利用SamInside获取系统密码Hash值
查看>>
juniper SRX vmware模拟器(能够出现可用网卡)
查看>>
WPF-15:AutoCompleteBox的使用(实现下拉列表)
查看>>
记录我所接触的python模块
查看>>
Windows Server2012域用户映射网络驱动器
查看>>
IBM X3650 M3服务器安装SUSE LINUX 10实战
查看>>
Word 2003中对不同的节设置不同的页面边框的特殊情况小结
查看>>
Android双机(网络和USB)调试及其完美ROOT
查看>>
JAVA企业级应用Tomcat实践
查看>>
Android应用程序绑定服务(bindService)的过程源代码分析(1)
查看>>
《iPhone与iPad开发实战—iOS经典应用剖析》连载八
查看>>
OSSIM安装注意事项
查看>>
【转载】Go对比Python的优点
查看>>
收费版APP三年总结(个人经验)
查看>>
SEO深度解读之HITS链接分析算法
查看>>
整合微软TechNet资源库上的文章为PDF
查看>>
为VMware ESXi主机添加本地存储的过程及注意事项-之1
查看>>
指付通盗刷信用卡维权连载--9月4日维权纪实
查看>>
XenServer 6.5实战系列之十二:License Management
查看>>