当前位置:首页 > 日记 > 正文

java内存分配问题

java内存分配问题

这个一般人不会知道的,其实如果定义一个字符串有两种方式一种是String str=new String(xx);这种是在内存中分配,而你这样定义String s3 = abc1;这种方式是将字符串定义在虚拟机的字符串常量池中的,而JVM中的常量池在内存当中是以表的形式存在的,建议你看一下字符串常量池相关的文章。由于常量的值在编译的时候就被确定了,所以这个答案应该是2个,分别是“abc1”和abc1范。你好好理解一下哈。
至于你说的堆和栈的问题你就要好好理解一下java里的垃圾收集机制的,一般的你建立一个对象ClassType type = new ClassType();其中type叫对象的引用(也叫句柄)这个对象引用都是放在栈中的,其保存的是对你new出来的一个对象的指向(你也可以理解为地址),而你new出来的对象就保存在堆内存中。当jvm的内存占用到一定的值时,jvm就会检查保存对象引用的栈表,如果发现没有指向的引用就将那部分内存释放掉。
很清楚吧 望采纳哈

1. Java有几种内存?每一种内存有什么功能?哪一种内存速度快?

有六个地方都可以存储数据:
(1) 寄存器(Registers)。这是速度最快的存储场所,因为寄存器其他所有存储媒介都不同:它位于处理器内部。不过,寄存器的数量十分有限,所以寄存器是根据需要由编译器适当地分配。作为一个程序员,我们对此没有直接的控制权,也没办法在程序里头感觉到寄存器的任何存在迹象。

(2) Stack(栈)。位于一般的RAM(random-access memory,随机访问内存)中。处理器通过其指针(“栈指针”,stack pointer)获得处理的直接支持。栈指针若向下(后)移,会分配新的内存;若向上(前)移,则会释放那些内存。这是一种特别快、特别有效率的数据存储方式,速度仅次于寄存器。由于Java编译器有责任产生“将stack指针前后移动”的程序代码,所以它必须能够完全掌握它所编译的程序中“存在stack里头的所有数据的实际大小和存活时间”。如此一来便会限制程序的弹性。由于这个限制,尽管有些Java数据要存储在栈里——特别是对象句柄,但Java对象并不放到其中。

(3) Heap(堆)。Heap是一种通用性质的内存存储空间(也存在于RAM中),用来置放所有Java对象。“内存堆”或“堆”(Heap)胜过stack之处在于,编译器不需知道究竟得从堆里分配多少存储空间,也不需知道从堆上分配的空间究竟要存活多长的时间。因此,用堆存储数据时会得到更大的灵活性。要求创建一个对象时,只需用new即可。执行这些代码时,会在堆里分配空间。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会比从栈里分配花掉更长的时间(假设你真的可以在Java中像C++一样地从stack上产生对象的话)!

(4) 静态存储空间(Static storage)。这儿的“静态”(Static)是指“位于固定位置”(也在RAM里头)。静态存储空间存放着“程序运行期间”一直存在的数据。可用static关键字将某个对象内的特定成员设为静态,但Java对象本身永远都不会置入静态存储空间。

(5) 常量存储空间(Constant storage)。常量值通常被直接置于程序代码里头。因为它们永远都不会改变,所以也是安全的。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(read-only memory,ROM)中。

(6) 非RAM存储空间(Non-RAM storage)。若数据完全存活于程序之外,则程序不运行时数据仍继续存在,脱离了程序的控制范围。其中两个最主要的例子便是“串流化对象(streamed objects)”和“持久性对象(persistent objects)”。在串流化对象形式中,对象会被转换为一连串的字节(bytes)流,这些bytes通常会被传送给另一台机器。而在持久性对象形式中,对象被存储于磁盘,即使程序运行结束,这些对象还能够继续保有。这种类型的存储空间的特点在于,它们能够将对象转换为可存储于其他媒介的形式,并在需要时,将所存储的数据还原成可存储于RAM中的一般对象。Java提供了对“轻量级持久性(Lightweight persistence)”的支持。新版本有可能提供更完善的解决方案。

针对你的补充我也补充一下:堆内存和栈内存确实是我们常常用的东西,比如
Animal a = new Animal();
这个时候相当于在堆内存中开辟了一个空间保存了Animal的信息以及着块空间的内存地址,然后在栈内存中划了一小快空间保存了堆中的内存地址,这个时候我们就可以说引用a指向Animal()了.

可是有时候,有个静态类.Animal,里面有个静态方法speak();
那么可以这么直接调用Animal.sepak();
这个时候既没有new,也没有Animal a=??;
所以既没有在堆中开辟空间也没有在栈内存中开辟空间 ,
可是方法确实能执行,一切程序都运行在内存里,那么证明有新的内存区,就是静态空间了.
当然还有常量什么的等等

相关文章

为什么现在出的笔记本很多都是高处

为什么现在出的笔记本很多都是高处

显卡,主机,模拟,预算,推荐,显卡性能高了功耗也高,现在的笔记本还有兼容续航时间。所以,显卡只要够用就好啦!笔记本的应用场景主要是工作,不适合游戏。长期游戏的情况下,发热量太大,笔记本受不了,慢慢厂商就放弃了这块市场。影音没问题,游戏娱乐就算…

电脑背景桌面 | 电脑背景桌面如何

电脑背景桌面 | 电脑背景桌面如何

桌面,壁纸,电脑配置,背景,桌面背景,电脑背景桌面如何更换可在电脑的个性化进行设置。;1、以win10 系统为例,首先打开windows设置,找到个性化选项;2、进入个性化设置界面后,点击“背景”选项进行设置;3、则可在右边进行设置,背景有三种选择方式,选择…

查看电脑配置的软件 | 可以查看电

查看电脑配置的软件 | 可以查看电

电脑配置,软件配置,下载,软件推荐,可以查看,可以查看电脑配置的软件在京东打开你想买的或者在看的电脑,往下拉会看到详情哪里有个规格参数,点击更多就可以查看完整的电脑配置了能查看电脑配置的软件用360查看电脑配置和CPU温度的步骤:1、打开3…

什么是显卡配置

什么是显卡配置

显卡,配置,参数,设置,电脑配置,购买显卡的时候 会有显卡说明 有显卡的牌子和型号,这就是显卡的配置,显卡出现问题一般有硬件问题 和软件问题两种,软件问题重新安装显卡驱动可以解决,硬件问题更换显卡!怎样适合自己显卡也不用说那么多吧,如果你是…

电脑为什么没有声音 | 平板电脑为

电脑为什么没有声音 | 平板电脑为

平板电脑,显示,电脑配置,声音,耳机,平板电脑为什么没有声音问题分析:1.系统设置问题。首先确定ipad音量大小调试是正确的,没有被错误的把音量调到最低,然后看是否侧边开关被选择到静音。如果单独是玩游戏的时候ipad没声音,进入游戏的设置,仔…

预算8000元组装一台主机,配有i7-870

预算8000元组装一台主机,配有i7-870

配置,显卡,预算,电脑配置,其他的,8000配1070。看不懂预算8000元组装一台主机,配有i7 8700k和gtx1070ti显卡,其他配件该怎么选?题主手里应该有了所说的CPU和显卡了吧。不然8000元是不够的。在这就当你有了,剩下的配件还缺少主板,散热,内存,硬盘,电源…

电脑本地连接不见了 | 台式电脑本

电脑本地连接不见了 | 台式电脑本

本地连接,无法上网,恢复,电脑配置,不见了,台式电脑本地连接不见了本地连接未识别的网络,其解决方法是:1、首先选择电脑桌面的计算机图标,右键点击,在属性框中选择设备管理器,在设备管理器页面下找到网络适配器选项并点击。2、点击网络适配器后,就…

电脑屏幕闪烁不停怎么回事 | 戴尔

电脑屏幕闪烁不停怎么回事 | 戴尔

闪烁,屏幕,电脑配置,怎么回事,电脑屏幕,电脑屏幕闪烁不停怎么回事电脑屏幕一直闪烁不停有很多原因,需要一步步的分析解决。原因如下:、分辨率设置不正确引起的。如果不是分辨率的问题或设置不了分辨率,可能是显卡驱动受损引起的。已经安装的显…

Intel酷睿i7系列中CPU哪个好?

Intel酷睿i7系列中CPU哪个好?

酷睿,电脑配置,主频,系列,Intel,现在一般有2中配法一种是I7920+X58(一说940也不错 但是940是C0步进的超频性能不怎的 个人感觉不怎样)一种是I7860+P55第一种的好处是支持3通道 内存性能很强悍(尤其是超频后WIN7跑分内存基本是满分)另外支持3路…

手机控制电脑 | 手机控制电脑音量

手机控制电脑 | 手机控制电脑音量

控制,遥控,设置,电脑配置,音量,手机控制电脑音量手机自带录音不稳定,需要安装专业的有法律效力的通话录音软件,打开应用商店搜索软件“移动公证”,安装该软件之后,使用本机手机号注册,注册完成即可双向通话录音,录音机功能,并存储到云端平台,通过云…

i38350k相当于移动端

i38350k相当于移动端

参数,移动端,超频,电脑配置,i38350k,是。i3 8350K作为Intel第八代酷睿i3处理器拥有4个计算核心在Coffee Lake及14 nm工艺的加持下基础频率4.0Ghz加速频率为4.0Ghz。i3 8350K相比上一代i3 7350KCPU核心增加了2个,基础频率降低了0.2Ghz,加速频…

快手下载电脑版 | 快手下载电脑版

快手下载电脑版 | 快手下载电脑版

下载,操作,操作流程,快手,电脑配置,快手下载电脑版怎么操作有以下几种下载方式: 应用市场(华为)搜索下载或在应用市场视频类软件中找到快手下载、浏览器搜索快手下载,下载应用宝等软件管家后搜索快手下载或在视频直播类软件中选择快手下…