本帖最后由 sjkzc3 于 2013-05-07 15:21:36 编辑

解决方案 »

  1.   

    推荐这本书: http://book.jd.com/10697182.html
      

  2.   

    我是这样理解的,你看一下对不对啊?:
    1. 对象的引用(a1)应该申请一个内存,它的大小是4个字节
    2. new A()的这个具体的对象,应该是在堆里面,其大小应该按照它的基本数据类型+其他的引用数据类型的大小
    3. a1 4个字节,它是在堆里面还是在栈里面,还是都有可能?这个不确定。
    如果a1是局部变量,它是否在栈里面?
    如果a1是类的成员变量,它是否在栈里面?
      

  3.   

    多谢推荐这本书《深入理解java 虚拟机》
    本人刚刚开始JAVA之旅,看来要读的书很多啊
    你看一下楼上,我的第一印象,是否正确啊?
    多谢
      

  4.   

    引用的这段文字说的虽然非常好,但是不一定所有的java程序员能够看懂,如果是学过c的人一看就很容易明白。但是如果只学习过java的人可能本来理解的还挺好,结果越看越糊涂。
      

  5.   

    这类概念,在JAVA项目中用到的多不?
      

  6.   

    在32位JVM中,引用的大小是32bit,最多使用4G内存;在64位JVM中,假设你不使用-XX:+UseCompressedOops选项,你的引用大小是64bit,可以使用。。我都不想数有多少内存;假设你使用了-XX:+UseCompressedOops,那引用的大小是32bit,但是你可以使用最多32G的内存。原理是它把所指向的内存地址缩小了8倍(相对32位JVM里的引用来说)。也就是说,这里一个引用指向地址4,实际上指向的是内存地址32。所以如果你有很多不足8字节的小对象,会造成客观的资源浪费。但是一般会为了性能,将这个选项打开(JavaSE6u23之后就是默认打开了,可以用-XX:-UseCompressedOops关闭)
      

  7.   

    在实际编程中,你只要知道java中拿到的都是对象引用,接触不到对象本身,这些引用使用完以后,会有垃圾收集器自动回收堆内存
      

  8.   

    多谢推荐这本书《深入理解java 虚拟机》
    本人刚刚开始JAVA之旅,看来要读的书很多啊
    你看一下楼上,我的第一印象,是否正确啊?
    多谢
    没什么java基础的话,看这本书会比较晕的,而且过于深入底层的知识,会影响你对java语法的认知,因为class指令与Java语法的出入实在是比较大。
    建议你先从基本的开始入手,先熟悉java原生的语法,再深入研究jvm体系与class指令集,一步一步来,一口吃不成胖子。
      

  9.   

    你的意思是:
    1. 在64位JVM中,使用-XX:+UseCompressedOops这个选项,每一个引用的大小是32bit?如果不使用,引用的大小是64bit.
    2. 但是引用指向的地址的大小,也就是对象的大小,不是由引用来决定的吧? 怎么理解引用指向地址是4,实际上指向32?你的意思是如果引用这个指针移动一位,增加的是32个bit吗?
    多谢。
      

  10.   

    多谢推荐这本书《深入理解java 虚拟机》
    本人刚刚开始JAVA之旅,看来要读的书很多啊
    你看一下楼上,我的第一印象,是否正确啊?
    多谢
    没什么java基础的话,看这本书会比较晕的,而且过于深入底层的知识,会影响你对java语法的认知,因为class指令与Java语法的出入实在是比较大。
    建议你先从基本的开始入手,先熟悉java原生的语法,再深入研究jvm体系与class指令集,一步一步来,一口吃不成胖子。
    多谢你的建议。
    以前看视频的老师也说,学习编程不能太钻牛角尖^^
    我的意思也是就题论题,看看能讨论多深啊。呵呵。
    我也会及时结贴的。
      

  11.   

    Good,解释的很清楚。
    但是我想知道的具体大小^^