对于Java程序员来说,并不必显示地对内存进行管理,一切都是交给Java虚拟机去做的,而且,你也不一定做得比Java虚拟机来得专业。
在你没有运行java程序之前,没有内存一说,只有运行以后,程序会被java虚拟机给编译,运行,在编译运行的过程中,程序员自定义的变量、类、方法、接口等等都会被放到不同的内存区域中,这时你只能通过调试获取变量的值(此时的值是被放在内存中的)。在调试过程中,看见一个类或者方法有很长的一串字符,那就是内存地址,因为它不能像变量一样,看见具体的值。
所以,你获取不到内存地址的
希望我能帮到你
RuntimemaxMemory(); //最大JVM内存(就是你配置给JVM的值)
RuntimetotalMemory();//JVM可支配的最大内存值
RuntimefreeMemory();//剩余内存空间
另外给一个例子:
Runtime run = RuntimegetRuntime();
long max = runmaxMemory();
long total = runtotalMemory();
long free = runfreeMemory();
long usable = max - total + free;
Systemoutprintln("最大内存 = " + max);
Systemoutprintln("已分配内存 = " + total);
Systemoutprintln("已分配内存中的剩余空间 = " + free);
Systemoutprintln("最大可用内存 = " + usable);
程序使用:javalangRuntime 包,不需要特别下载和导入
内存中占用多少字节是不会让你轻而易举获取的。如果想要知道一个数据在内存中的大小,建议你看看JVM相关规范的书,对象在内存的大小不是不能计算,因为这不仅仅是一个数据,数据存放相关的信息,以及此数据可能调用的方法,以及此数据本身的类型信息,以及数据在内存中的堆内存中的索引信息,以及存放这个索引的内存信息,以及你这个数据类型中引用的常量池中的信息。。。等等等不可能让你准确知道。因为内存是不断更新的,垃圾会被不断回收,回收算法的执行,数据在内存中的位置也会发生相应的移动。严格的说指定一个类型的数据除了基本类型外,其他都是不连续的。如果楼主用过C或者C++的比如说链表的结构,现在的问题就好比你想知道一个具体链表占了多大内存。呵呵,水平有限,不能准确回答你要的结果。
java中不建议直接获取字符串内存地址,因为java不像c语言,获取内存地址是C语言的强项,java的弱项。但是java内存地址还是有一个应用场景,就是判断两个字符串内存地址是否相等来判断是否是同一个对象,用双等号“==”来比较的。参考代码如下:
public class Test01 {
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="abc";
String str2=new String("abc");
Systemoutprintln(str1 == str2);//输出false
}
}
这个问题太不好回答了。
但是又很好回答。
比如:
String
str1=new
String("我爱我家");
这个时候已经在内存中分配一个内存块用来存储这个字符串数据了。
所以呢你取的时候也是很简单的。
直接读取str1就ok了。
你所说的取内存数据是想问什么呢?
以上就是关于java获取变量,对象等的内存地址全部的内容,包括:java获取变量,对象等的内存地址、java程序怎么测量 所使用的内存大小 ,、java怎么获得数据在内存中长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)