标签: heap-memory

从函数返回堆分配指针是不礼貌的吗?

之前boost::shared_ptr,从函数返回堆分配指针被认为是一种不好的做法,因为调用者需要记住free()该对象吗?

或者,它被认为是"正常"?

c c++ pointers heap-memory

1
推荐指数
1
解决办法
1281
查看次数

分析java heapdumps:为什么枚举实例保存在堆中?

我一直在寻找我的应用程序中的内存泄漏和fhat与jhat,由于某种原因,枚举的实例保存在堆中.

为了模拟它,我已经在tomcat中部署了我的应用程序,稍微使用它,停止它并在tomcat上执行GC(通过jconsole).然后拿了一个heapdump发现了这个:

instance of x.mgbean.quote.Input$Tab@0xe0887c0 (16 bytes)
Class:
class x.mgbean.quote.Input$Tab
Instance data members:
name (L) : VEHICLE (24 bytes)
ordinal (I) : 0
References to this object:
java.util.HashMap$Entry@0xe15f7c0 (24 bytes) : field value
class x.mgbean.quote.Input$Tab (84 bytes) : static field VEHICLE
[Lx.mgbean.quote.Input$Tab;@0xe0887f0 (20 bytes) : Element 0 of  [Lx.mgbean.quote.Input$Tab;@0xe0887f0
[Lx.mgbean.quote.Input$Tab;@0xe1541e8 (20 bytes) : Element 0 of  [Lx.mgbean.quote.Input$Tab;@0xe1541e8
Run Code Online (Sandbox Code Playgroud)

知道怎么会这样吗?

java enums heap-memory heap-dump

1
推荐指数
1
解决办法
764
查看次数

获取堆空间内存错误 - 如何使用Java堆内存

我正在阅读一个大小为2.6GB的XML文件--JVM的大小为6GB.

但是我仍然得到堆空间内存错误?

我在这做错了什么......

作为参考,我输出JVM的最大内存和可用内存属性 -

最大内存显示为大约5.6GB,但可用内存仅显示为90MB ...为什么只有90MB显示为空闲,尤其是 当我甚至没有开始任何处理时...我刚开始这个程序?

java memory-leaks memory-management heap-memory

1
推荐指数
1
解决办法
2729
查看次数

如何通过用户输入在堆上分配内存?

有没有办法创建一个函数,可以将一块内存分配到堆上,调用者可以传递一个他们想要分配的大小并返回一个有效的地址供调用者使用?我知道如何分配特定的大小,但有没有办法让呼叫者通过所需的金额?

c++ heap-memory visual-c++

1
推荐指数
1
解决办法
174
查看次数

复制到缓冲期间的分段错误错误

我写代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
        char * var=(char*) calloc(10, sizeof(char));
        strncpy(var,"123456789",9);
        strncpy(var, "abcdefghi",1000000 );
        printf("This is var == %s\n",var);

}
Run Code Online (Sandbox Code Playgroud)

但在编译并运行他之后,我有Segmentation fault错误.如果我将行中的最大复制字符更改strncpy(var, "abcdefghi",1000000)为10,那么它可以正常工作.但我真的不明白为什么segmentation fault我的情况会发生错误.

c heap-memory dynamic-memory-allocation

1
推荐指数
1
解决办法
49
查看次数

如何在eclipse中增加jboss内存堆大小

我试图通过改变run.conf.bat文件来增加jboss的java内存堆大小

如何增加jBoss服务器的堆大小

并设置为

    rem # JVM memory allocation pool parameters - modify as appropriate.
set "JAVA_OPTS=-Xms2048M -Xmx2048M -XX:MaxPermSize=1024M"
Run Code Online (Sandbox Code Playgroud)

如果我使用Windows命令提示符从jboss_dir/bin目录运行jboss服务器,它将以上述JAVA_OPTS值运行

然而,如果运行来自相同的JBoss eclipse IDEeclipse console以下消息显示

    22:31:46,457 INFO  [ServerInfo] Java version: 1.6.0_31,Sun Microsystems Inc.
22:31:46,457 INFO  [ServerInfo] Java Runtime: Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
22:31:46,457 INFO  [ServerInfo] Java VM: Java HotSpot(TM) 64-Bit Server VM 20.6-b01,Sun Microsystems Inc.
22:31:46,457 INFO  [ServerInfo] OS-System: Windows 7 6.1,amd64
22:31:46,458 INFO  [ServerInfo] VM arguments: -Dprogram.name=run.bat -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dfile.encoding=Cp1252 
22:31:46,483 …
Run Code Online (Sandbox Code Playgroud)

java eclipse jboss heap-memory

1
推荐指数
1
解决办法
9195
查看次数

堆分配中哪种情况更轻/更重?

作为对另一个问题的先前答案的后续跟踪,我开始对堆分配如何在循环中工作感到好奇.

以下面两个场景为例:

宣言:

SomeList: TObjectList<TSomething>;
Run Code Online (Sandbox Code Playgroud)

场景1:

begin
  for X := 1 to 10 do
    SomeList[X].DoSomething;
end;
Run Code Online (Sandbox Code Playgroud)

场景2:

var
  S: TSomething;
begin
  for X:= 1 to 10 do begin
    S:= SomeList[X];
    S.DoSomething;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

现在,我很好奇的是堆分配在两种情况下的工作原理.场景1在每次循环迭代中直接调用列表项,我想知道它是否每次循环迭代时都会添加到堆和释放.另一方面,第二种情况显然只有一个堆分配,只需声明一个局部变量即可.

我想知道哪个场景在堆分配上执行更重的负载(作为性能问题的一个主要原因)?

delphi loops memory-management heap-memory

1
推荐指数
1
解决办法
133
查看次数

堆栈或堆上的这个对象?

在C++/CLI中,以下两个是相同还是不同?

System::String ^source("Hello World");

System::String ^source= gcnew System::String("Hello World");
Run Code Online (Sandbox Code Playgroud)

第一个是堆栈,第二个堆栈吗?
或者他们都在堆?
.Net对象我认为只有引用它们不能在堆栈上创建,这与C++允许我们不同.有人可以解释一下吗?

.net c++-cli heap-memory

1
推荐指数
1
解决办法
108
查看次数

应该函数返回"新"对象

应该是一个函数返回指向堆上分配的内存的指针吗?

换句话说,下列哪种方法更"正确"?

// Method #1
Object* getObject1() {
    return new Object();
}

// Method #2
std::shared_ptr<Object> getObject2() {
    return std::make_shared<Object>();
}

int main() {
    // Usage of method #1
    Object* o1 = getObject1();
    o1->doSomething();
    delete o1; // object has to be deleted by user

    // Usage of method #2
    std::shared_ptr<Object>& o2 getObject2(); // has to be kept in shared_ptr
    o2.get()->doSomething();
    // object is deleted when o2 destructs
}
Run Code Online (Sandbox Code Playgroud)

我想第一种方法可能更快,但第二种方法不需要用户删除对象.

c++ pointers return function heap-memory

1
推荐指数
1
解决办法
5759
查看次数

使用Static对内存管理是否更好?

在大约像静态一些文章和教程这个这个,据说使用静态还是不错的内存管理,因为静态变量类地区的类加载的时间变内存只有一次。

但是我的朋友告诉我,静态方法保存在堆栈中,因为管理堆比堆栈容易,并且垃圾收集器仅在堆上起作用,并且只要应用程序正在运行,就不会清除堆栈,因此请尽量少使用静态方法。您可以。

注意:

我已经在stackoverflow中阅读了有关堆栈内存的相同问题,但是我没有得到太多,因为使用“ PermGen空间”和我不知道的其他词,它们有些复杂和专业。

我希望有人简单地解释我朋友的预付款是否正确?

我知道这取决于,想象一下我既可以使用静态方法也可以使用静态方法进行设计。谈论哪个内存管理更好的方法?

java static memory-management heap-memory stack-memory

1
推荐指数
1
解决办法
311
查看次数