我写了一个小的临时程序来检查按行或列循环遍历二维数组的时间,因为我记得大数据集的一种方法更快,但我不记得哪种方式.当我运行我的程序时,我遇到了一个有趣的错误.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at testing.ForLoopTest.main(ForLoopTest.java:10)
Run Code Online (Sandbox Code Playgroud)
现在在我的测试中,我使用在eclipse中使用默认堆设置运行的int [10000] [10000].我知道我可以增加堆大小,但我的直觉告诉我,这应该运行得很好而不需要我这样做.这是正常的吗?在我的代码中有些愚蠢的东西我没有看到吗?
这是我的代码
public static void main(String[] args){
final int arrSize = 10000;
long start = 0;
long rowFirstTime = 0;
long colFirstTime = 0;
int[][] arr = new int[arrSize][arrSize];
start = System.currentTimeMillis();
for(int x = 0; x < arrSize; x++){
for(int y = 0; y < arrSize; y++){
arr[x][y] = -1;
}
}
rowFirstTime = System.currentTimeMillis() - start;
start = System.currentTimeMillis();
for(int y = 0; y < …Run Code Online (Sandbox Code Playgroud) char * s;
s[400] = 'd';
Run Code Online (Sandbox Code Playgroud)
如果它不是未定义的行为,那么这是否意味着我不能随意访问堆栈外部RAM的任何部分?所以每次操作系统启动一个进程时,它都会分配一个RAM区域,我可以在那里做一些讨厌的东西(mallocs除外),因为操作系统会在进程完成后清理堆栈.
为什么操作系统在进程结束后无法清理堆?这是否意味着堆与所有其他进程共享?
如果我在堆栈中放入太多数据,那就是缓冲区溢出,但是我可以放入多少堆栈?是OS绑定,RAM大小绑定还是CPU缓存绑定?
我正在攻读SCJP考试,我正在处理一系列问题.
一个问题的回答我不确定,希望有人能够帮我把这个问题放到一边.
这是问题,
鉴于:
11. public String makinStrings() {
12. String s = "Fred";
13. s = s + "47";
14. s = s.substring(2, 5);
15. s = s.toUpperCase();
16. return s.toString();
17. }
Run Code Online (Sandbox Code Playgroud)
调用此方法时将创建多少个String 对象?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
Run Code Online (Sandbox Code Playgroud)
提前感谢您提供的任何帮助.我非常赞赏它.
我需要在堆上创建一个字符串,我想知道标准库中是否已经包含类似的内容,或者我是否必须自己实现它(使用malloc())?
有代码:
struct FooBar
{
FooBar()
{
MyObject obj;
/// when c-tor is ended, obj must be deleted through d-tor call
}
};
...
FooBar* fooBar(new FooBar);
Run Code Online (Sandbox Code Playgroud)
fooBar在堆上分配.但是对象MyObject obj里面FooBar的构造函数不知道它的创建位置.那么可以在被处理MyObject的上下文中实例化FooBar它就像在堆栈中创建的那样?
堆上分配的对象是否有自己的堆栈?这种堆栈的大小是多少?
如何增加我的应用程序可以使用的可用内存(更具体:RAM的一部分)?我不是指iphone硬盘上的可用空间,而是指RAM.
有没有人知道是否有办法只为我的应用程序使用RAM的整个免费部分?
我必须清楚一点,对不起,如果它太模糊了:
我不得不考虑java堆大小,可以通过在java编程的启动命令中添加一个参数来增加它.我不知道,但目前在iphone上假设类似的事情发生(每个应用程序只有xxMB RAM执行)这个值可能是可调的,所以我可以使用整个剩余的RAM为我的应用程序.这几乎是我需要的特殊应用程序(非app-store-publication;文件大小在50MB到几个100MB之间)
每当Apple创建自己的自定义类时,它通常会创建一个指向对象的指针,而不是实际的对象本身.
例如,而不是做:
Class object
Run Code Online (Sandbox Code Playgroud)
他们经常这样做:
Class *object = [[Class alloc] init];
Run Code Online (Sandbox Code Playgroud)
为什么指针如此常用而不是将对象放在堆栈上?是否有一些技术原因,因为我没有看到这样做的任何直接好处.
编辑:如果Objective-C不支持堆栈上的对象,他们怎么能创建任何非指针?我的意思是我见过人们直接使用NSInteger.
我们可以在堆之外的其他地方放置动态分配的对象吗?我将如何定义一个重载的新运算符?
如果我有一些类竞技场
class Arena{
char area[2000];
public:
Arena(){}
};
Run Code Online (Sandbox Code Playgroud)
Arena my_arena(1000);
我想从Arena my_arena分配对象..
此外,与在性能等上从堆分配相比,这种内存分配有哪些可能的缺点?
我知道C++有析构函数,Java/C#有垃圾收集器,但内存解除分配有什么区别?