首页 > 系统相关 >Java内存解析(转)

Java内存解析(转)

时间:2023-08-08 12:36:03浏览次数:42  
标签:Java String 静态 内存 new 解析 放入 常量


栈、堆、常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,简单讲解Java内存分配方面的知识。

首先我们先来讲解一下内存中的各个区域。

 stack(栈):存放基本类型的数据和对象的引用,即存放变量。

如果存放的事基本类型的数据(非静态变量),则直接将变量名和值存入stack中的内存中;

如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。

heap(堆):存放new产生的数据。

data segment:分为静态域和常量域。

静态域:

存放在对象中用static定义的静态成员(即静态变量,同理,如果该静态变量是基本类型则将变量名和值存入静态域,如果是引用类型则指向new出的对象)。

常量池:

常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。

code segment:存放代码。

 

下面我来举几个简单的小例子来让大家认识一下这几个区域具体存放的内容:

注:例1和例2中大家要注意String类型不是基本数据类型,所以它可以创建对象,并且它的值是放在常量池中的。

例1. 非静态和静态变量的创建:

String str = "abc";  static Int a = 10;  //创建String类型的变量str;创建Int类型变量a

内存解析:

这里的str是非静态变量所以将其放入到栈中,而静态变量a则需要放入静态域中,对于变量值"abc"和10则都应该放入到常量池当中

 

Java内存解析(转)_常量池

例2. 对象的创建:

String str=new String("abc");  //创建String类型的对象str

内存解析:

这里的str是String类型的对象,所以放入栈中,而new出来的东西则放入到堆中,对于初始值"abc"则放入到常量池中即可。

 

Java内存解析(转)_静态变量_02

例3. 数组的创建

Int s[] = new Int[3];s[0]=3;s[1]=2;s[2]=3;

内存解析:

这里的s[]是一个数组变量,所以放入到栈中,new出来的东西还是放入到堆中,最后的每个元素的值则放入到常量池当中。

 

Java内存解析(转)_静态变量_03


标签:Java,String,静态,内存,new,解析,放入,常量
From: https://blog.51cto.com/u_16034393/7007083

相关文章

  • java多线程 sleep()和wait()的区别
    java多线程sleep()和wait()的区别作者:octobershiner(2篇文章)日期:十二月16,2011在11:58上午接触了一些多线程的东西,还是从java入手吧。相信看这篇文章的朋友都已经知道进程和线程的区别,也都知道了为什么要使用多线程了。这两个方法主要来源是,sleep用于线程控制,而w......
  • java 线程池
    博客分类:JavaJava工作thread活动JDK线程池的作用:    线程池作用就是限制系统中执行线程的数量。    根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队......
  • 第一个Java程序
    第一个Java程序使用cmd命令运行Java文件需要注意的是cmd使用的是GBK的编码格式,若保存的java不是GBK编码格式,则运行时会报错(乱码)代码截图运行截图使用cmd运行Java文件的顺序创建.java文件改变编码格式为GBKcmd命令跳转到文件目录javac编译java方法名运行运行原......
  • java多线程编程基础4--正确使用 Volatile 变量
    记住一点就是:对数据的操作是分三步:1.从内存从拿过来2.更改数据3.写入内存 还需要记住一点就是:我们在存储数据的时候,不一定是将数据存放在内存中的,有时放在寄存器中的。所以多线程操作的时候,共有变量A如果被一个线程操作,并且存放在寄存器中并没写入到内存中,而另一个线程操作这个......
  • 《从0到1:JavaScript快速上手》笔记(一)
    一、两个十分有用的方法document.write():表示在页面输出一个内容alert():表示弹出一个对话框二、变量与常量在JavaScript中,变量指的是一个可以改变的量,也就是说,变量的值在程序运行过程中是可以改变的。(1)在JavaScript中,给一个变量命名,我们需要遵循以下2个方面的原则。变量有字母、......
  • 编织人工智能:机器学习发展历史与关键技术全解析
    本文全面回顾了机器学习的发展历史,从早期的基本算法到当代的深度学习模型,再到未来的可解释AI和伦理考虑。文章深入探讨了各个时期的关键技术和理念,揭示了机器学习在不同领域的广泛应用和潜力。最后,总结部分强调了机器学习作为一种思维方式和解决问题的工具,呼吁所有参与者共同探索......
  • JAVA jar包转.NET dll文件注意事项
    一、配置等:javaVersion:”1.8.0_151”IKVM:ikvm-8.1.5717.0IKVM下载地址:链接:https://pan.baidu.com/s/1mYutk0yghHxw2rOgFpDKJw提取码:0777IKVM需要配置环境:将IKVM.NET的bin文件夹的地址添加到环境变量。计算机右键属性–高级系统设置–高级–环境变量–在系统变量中找到PATH......
  • Java后端07(Spring未完成)
    Spring​ 涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。Spring配置文件文件头<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework......
  • 三. JSON数据解析(parse)
    三.JSON数据解析(parse)专栏目录一.JSON二.JSON基础数据结构三.JSON数据解析(parse)0.引我们现在已经将JSON的基础数据结构进行了C语言抽象了,就像已经准备好了房子,就等着入住了,一般来说,JSON数据是以字符串形式由外部传入的,被解析的对象就是这个JSON格式的......
  • java mybatisplus @Table(typerHadler)的坑
    在使用JavaMyBatis-Plus的@Table注解时,如果使用了typerHadler属性,可能会遇到一些问题和坑。下面是一些常见的问题及其解决方案:1.设置了typerHadler属性但不起作用:如果在@Table注解中设置了typerHadler属性,但在实际使用中没有生效,可能是因为配置的类型处理器没有正确注册。请确保......