java里的对象是不是都是在堆中分配的呢?如何在栈上建立一个对象呢?
比如C++中:
void Cpp()
{
   ClassA a;//这样就是一个局部对象了
   .....
}java中:
void java()
{
   ClassA a;//这是定义一个引用,如果想使用一个对象,要么new一个,要么把另一个对象
赋给a
}这好像是个基本的问题,以前没注意过,今天做东西,堆溢出了,才想起来,高手解答啊..谢谢
!!

解决方案 »

  1.   

    heap 溢出?  能不能把源代码拿出来参考一下
      

  2.   

    private Shape3D drawBall(Point3f center, float radius) {
    Shape3D shape = new Shape3D();
    Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
    Color3f yellow = new Color3f(1.0f, 1.0f, 0.0f);
    for (float i = 0; i < Math.PI; i += 0.02) {
    for (float j = 0; j < Math.PI * 2; j += 0.02) {
    PointArray point = new PointArray(1, PointArray.COORDINATES
    | PointArray.COLOR_3);
    double x = radius * Math.sin(i) * Math.cos(j);
    double y = radius * Math.sin(i) * Math.sin(j);
    double z = radius * Math.cos(i);
    point.setCoordinate(0, new Point3d(y, z, x));
    if (this.Texture1(x, y) == true) {
    point.setColor(0, white);
    } else {
    point.setColor(0, yellow);
    }
    shape.addGeometry(point);
    }
    }
    return shape;
    }
      

  3.   

    不能在栈中创建对象把。堆溢出是不是发生了OutOfMemoryException?
    试一下把一些无心的对象保持要释放掉,或者通过java -Xmn -Xms -Xmx -XX:PermMaxSize:  来增大堆空间。
      

  4.   

    zzwh_0,确实出现outofmemoryexception.我是要渲染一个球,最简单的办法就是描点法,用尽量多的点逼近球体,java 3d中每个点都是一个对象,所以我要new很多对象来表示这个球,用C++虽然计算也需要一定的时间,但是内存不会出问题溢出.
    java -Xmn -Xms -Xmx -XX:PermMaxSize 来指定堆空间最大允许多大呢?
      

  5.   

    -Xms初始堆空间,物理内存的1/64,-Xmx最大堆空间为物理内存的1/16,-Xmn为-Xmx的1/4,最好-Xms与-Xmx一样大,先试一下吧。要是不行再大一点看看,好运。