`
simpleman7210
  • 浏览: 18122 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

实现数组相关指令

阅读更多
版本v034实现了数组相关指令。最近的版本(v04)准备支持本地方法和小型的类库。
  • v04.rar (77.5 KB)
  • 下载次数: 22
分享到:
评论
6 楼 simpleman7210 2014-02-23  
不错,正如你看到的,new和delete被重载了,目的是尝试管理内存。至于你的new对象为什么size是0x40,我测试了一下,并不是这样。比如,v034版本上new一个Object的实例,大小是8个字节。
class TestNew {
private int _x;

public static void main(String[] args) {
main();
}

public static void main() {
Object o = new Object();
TestNew t = new TestNew();
}
}


在上面这个代码中,new一个TestNew对象,大小是12个字节。所以,new一个对象的大小,肯定跟一个类的定义与关。请看看你的类是怎么定义的。
5 楼 panqj_hust 2014-02-22  
我最近才发现虚拟机 实现了,类的operator new与operator delete的重载。

但是有个问题,是为什么像一个对象的new大小,在进入到

//申请一块内存,size为申请的字节数
void *MemoryManagerImpl::alloc(int size)
{
这里的时候,size总是0x40呢?

在vs2010的上的测试,是这样的。
4 楼 simpleman7210 2014-02-17  
你的代码很清楚了,因为Object的实例不能转换为int[],所以抛出ClassCastException,如果是如下代码:
   int[] o = new int [5];
   int[] ia = (int[])o;
则这样转换将没有问题。
3 楼 panqj_hust 2014-02-17  
public class Test
{
public static void main(String[] args) {
main();
}

public static void main() {
Object o = new Object();
int[] ia = (int[])o;
int x = ia.length;
}

}


感觉虚拟机是对的,我看了下代码,应该出现这个ClassCastException。

这个Test.java是在v04.rar里面的。
2 楼 simpleman7210 2014-02-15  
把你的test.java程序贴出来看看,如果我的程序没有问题,问题可能在你的程序,ClassCastException表明在对象上作了不兼容的转换。
1 楼 panqj_hust 2014-02-13  
v04.rar 测试test.class的时候,出现了

Program abort, exception: java/lang/ClassCastException

这是什么问题啊?

相关推荐

Global site tag (gtag.js) - Google Analytics