1. java引用个对象是否在内存中真实存在还是只是一个地址
你表达的不够清晰,我这样跟你说吧!
User u = new User("亭台T","20","女");
这行语句其实分两部分,从等号分开来说:
右边new User();构造方法是真实的在内存中new出来一块空间;
而你的u对象 实际上只是拿到了这块空间的一个引用,或者说就是一个地址而已;
如果下面你再跟着一句代码:
User d = u;
那么d 也只是拿到了上面那块地址的引用,也就是说u 和 d 现在为止,其实本质上是一个对象,因为内存中只有一个你最开始new 出来的那块空间;
如果按如下方法来做你就会发现问题了:
u.setName("奇迹软件工作室");
System.out.print(d.getName());
你会发现你set 了u对象的属性,但是打印出来d的name也跟着变了,
也就是说,u和d都是引用,他们都引用了同一块内存的真对象地址;
奇迹软件工作室 东东程序猿 手打 请给分
2. 怎样用Java获取内存中的数据
可以考虑使用内存映射文件:java.nio.MappedByteBuffer,主要适合放入较大的数据进入系统内存
可以考虑使用:java.nio.ByteBuffer.allocateDirect()方法进行分配,可以将一些不适合放入堆里的数据放入系统内存
还可以采用java本地调用的方式,实现对系统自身内存的掌控与调度,这种方式可以让你灵活的访问系统的内存。
java的堆放入的对象尺度是有限制的,这里建议参考BigMemory 的实现机制以及内存管理机制
如果自己管理内存的话,建议参考其他语言对内存管理的方式。
你可以把数据放入线性数据结构中(这些数据是在系统内存中,而非jvm管理的内存里),这样就不存在分代问题,可以由你的应用在适当的时候清理系统的内存。这样,你的内存模型-释放机制就与jvm的内存管理机制处于一个互不干扰的异行线上。
3. 一个Java对象到底占用多大内存
Object o=new Object():
在java中空对象占八个字节,对象的引用占四个字节。所以上面那条语句所占的空间是4byte+8byte=12byte.java中的内存是以8的倍数来分配的,所以分配的内存是16byte.
举个例子:
Class O{
int i;
byte j;
String s;
}
其所占内存的大小是空对象(8)+int(4)+byte(1)+String引用(4)=17byte,因要是8的整数倍,所以其占大小为24byte.
当然,如果类里有其他对象的话,也要把其他对象的空间算进去
4. java 怎么把数据存到内存中
这里你采纳与否没关系,给你说说编程与内存的关系。
你定义的任何变量,常量,类,方法等等,其实都在内存中,没有所谓的把数据存内存中,这概念,你可以想一下电脑重启或关机后,内存中的所有数据,都会丢失,除非你保存到磁盘中去。
在内存中的数据有两块,第一、缓冲,一般写数据到磁盘的时候开辟出来的内存空间;第二、缓存,一般是从磁盘读数据到内存中开辟出来的内存空间。会这么使用,原因很简单,磁盘读写数据速度与内存不一致(磁盘的存取效率远远小于内存的存取效率),为了提高数据的存取效率,才会这么干的。
一般而言,java中的所谓数据,大部分都是类,从自动引用计数的概念来分析,你想把对象长久的放在内存中,不会被垃圾回收机制释放,注意制药有一个对象在使用/引用你的数据,这条数据就会存在内存中。所以,想servlet中的全局配置参数,随时可以取到还是唯一一份,你可以参考一下。
另外内存使用分堆与栈,堆在面向对象编程中存储对象的,栈是方法或函数执行的时候临时开辟的存储空间,方法或函数执行完毕就会释放。
希望我的回复能帮助到你,采纳与否没关系。有更好的答案,我就隐藏我的回复。
5. java中能否输出 引用的内存地址
很遗憾.不能..用java时不用考虑内存的问题,内存操作是不可见的.
有些人也许会说toString方法会打印出
"类型@十六进制数"这个十六进制数是该对象的散列码的十六进制表示而已..