class A{}
c++中:sizeof(A)=1//为什么是1个字节?
在c++中,通过sizeof(A)可以得到类A在内存中所占大小.问题一:在java中通过什么方法可以得到A类在内存中所占大小。
问题二:在java中有没有内存对齐?
问题三:能详细解释一下java中类属性,方法,抽象方法等所占的内存空间么?希望高手详细解答。谢谢~~

解决方案 »

  1.   

    基本可以这么理解吧  Java与内存绝缘...
      

  2.   

    1.System下面 好像有个freeMemery()方法,可以得到空闲内存,然后再创建A前后调用,2者相减
    2.这个没听说过
    3.属性如果是实例的,那么它在对象所占的空间里面,也就是在堆,方法在调用栈以上是自己理解,有不足之处希望高手指点,谢谢
      

  3.   


    问题一:在java中通过什么方法可以得到A类在内存中所占大小。
    Runtime类中提供了一些获取内存量的方法,但是无法确定一个类占用的内存大小。
    问题二:在java中有没有内存对齐?
    这不是java的问题了吧,看jvm的实现。
    问题三:能详细解释一下java中类属性,方法,抽象方法等所占的内存空间么? 
    方法有专门的方法区,static属性在方法区中安排空间,非static自然作为对象的一部分在堆中了。
      

  4.   

    java没有必要以这种思路来学习吧。
      

  5.   

    这些问题我也不懂,但是觉得楼主肯定是从C++过来的,JAVA不是太注重这些概念的
      

  6.   


    1. 目前没发现有 API 能做到这个,因为 Java 的 99% 的应用中根本用不到这个功能。
    2. 要看 JVM 的具体实现(不是只一个 Sun 的 JVM),不同 JVM 的处理方式或许不同。
    3. 同 1 这些信息对你使用 Java 编程没什么帮助。
      

  7.   

    我只知道A a = new A();
    a只是内存的一个引用,A具体的内容在堆空间
    学习^^……
      

  8.   

    java中类是不占空间的,只有你 new 一个实例的时候才会为其分配内存空间。
      

  9.   

    做java的 好象不需要考虑内存分配情况.jvm都帮我们做好这些事了.
      

  10.   

     用 Runtime类freeMemery()方法 在new这个类前后都计算下当前内存, 两个数减下 就能得到那个类对象的 大概内存。
      

  11.   

    java的目标是让开发人员不再为c++中那些东西费心,全都一样我们当初就学c++了
      

  12.   

    两个语言内存管理方式不同:c++由开发人员管理分配和释放,java是虚拟机管理。所以使用开发方式也不同。
      

  13.   

    1.System下面 好像有个freeMemery()方法,可以得到空闲内存,然后再创建A前后调用,2者相减 
    2.这个没听说过 
    3.属性如果是实例的,那么它在对象所占的空间里面,也就是在堆,方法在调用栈 以上是自己理解,有不足之处希望高手指点,谢谢
      

  14.   

    这个问题怎么还有人再回复啊,呵呵
    java开发99%不用考虑lz的问题
      

  15.   

    ClassLoader在defineclass时按byte[]读的,不知道是不是类大小=.class文件大小,没太研究过