当前位置:首页 » 存储配置 » java对象存储在哪里

java对象存储在哪里

发布时间: 2022-08-02 10:53:58

㈠ 运行时java对象在内存中是什么样子的

JAVA对象是在堆中存储的, 它在内存中的地址被存储在一个或多个变量当中,类似于C中的指针,通过这些变量来操作对象, 对象理论上是不能独立存在的,可以有多个变量存有它的地址,但不能没有变量存它的地址,一旦没有变量存有它的地址,就没法对它进行操作, 对于程序运行来说,它就成了内存垃圾,正常情况下会被JAVA垃圾收集器给清除(少数异常情况可能回收不掉)

㈡ Java的对象的内容在堆内存中的存储形式是怎样的

java中数组是以对象形式存在的,栈中存储的是数组对象的地址(即引用),而对象本身不存放在栈中,而是存放在堆中,使用时通过栈中的引用地址找到堆中的实际对象,这里的引用地址类似于C/C++中的指针。

㈢ Java创建完一个对象之后,对象的成员变量存储在哪

  • Java

    (计算机编程语言)

    编辑

  • Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程[1]。

    Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点[2]。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等[3]。

㈣ java中的对象是存在哪里

比如 String bb= new String ();new出来的对象放在堆内存中了,bb这个是局部变量放在栈内存

㈤ java中静态对象是存放在堆还是栈

Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。
这也是 Java 比较占内存的原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

㈥ Java对象存储到什么地方

一个对象有属性有方法,new这个对象的时候内存中就存在了这个对象

㈦ java的方法中new的对象存储在内存中那个区域

这个对象存在堆中,还是栈中?
答:堆,new一个对象,一定是在堆中
方法内部new出来的对象,在哪里存着?
答:堆,new出来对象的实例变量都存在堆上面。

栈,这个东西,需要理解为:线程运行时,才会创建,执行完,就没了。
Person p = new Person();
上面这段代码,在执行时,p压入栈,通过局部变量表,找到对应的【实例数据】,执行完毕后释放。

㈧ Java中数组对象的存储位置

原帖地址:http://hi..com/sqldebug/blog/item/9758b9ffa605e51a09244d91.html

数组单一说在栈中还是堆中都是错误的,分为几种情况:

1、固定数组在函数体内分配是在栈中的

我们做一个试验,一般DELPHI程序线程的栈大小是1M,如果我们函数体中申请4M大小的数组,报栈溢出,则表示数据的大小是在栈中的。

const
CArrayCount = 1024*1024*4;

procere TForm1.btnMainThreadClick(Sender: TObject);
var
MainThreadArray: array[1..CArrayCount] of Char;
i: Integer;
begin
for i := Low(MainThreadArray) to High(MainThreadArray) do
MainThreadArray[i] := #0;
end;

我把以上代码在主线程中测试时,确实报了栈溢出,如果这时你把DELPHI程序的栈调大为6M则正确,表示在函数体中申请的数组是在栈中的。

2、固定数组在类中分配是在堆中的

我们在类中加一下定义语句

FFixArray: array[1..CArrayCount] of Char;

程序正常,表示在类中分配固定数组是在堆中的。

3、固定数组全局变量是在堆中的

我们在程序定义全部数组

GFixArray: array[1..CArrayCount] of Char;

程序也正常,表示全局固定长度是在堆中的。

3、动态数组不管在函数体中、类中、全局变量都是在堆中

如果你会汇编,看一下汇编就明白了。DELPHI这么实现是合理的,在函数里中分配的固定长度数组放在栈中可以加快运行效率,而且在多线程的情况下,不用像堆分配有加锁。只是大家在写程序的过程中注意在函数里定义太长的数组需要注意,否则栈溢出,程序就崩溃了。

热点内容
cmdc语言 发布:2024-10-05 15:58:32 浏览:550
服务器怎么弄公网ip 发布:2024-10-05 15:57:02 浏览:640
设备配置在什么地方 发布:2024-10-05 15:44:59 浏览:249
matlab外部接口编程 发布:2024-10-05 15:36:58 浏览:365
C事件编程 发布:2024-10-05 15:15:43 浏览:639
一台服务器出现两IP 发布:2024-10-05 15:10:05 浏览:925
md5加密算法c 发布:2024-10-05 15:05:40 浏览:761
如何重设控制器密码 发布:2024-10-05 14:19:13 浏览:439
安卓如何远程签到 发布:2024-10-05 14:11:11 浏览:301
阿里云服务器控制面板 发布:2024-10-05 13:57:48 浏览:820