安装Windows更新后,我的IE版本更新到11.0.9600.18059(更新版:11.0.24),我发现它消耗太多内存,当我打开3-4标签和冲浪10-15分钟,内存筹集最多1300-1500 MB,我必须重新启动它.
那么有没有可用的解决方案或补丁?
我最近对CouchDB进行了一些评估.我发现视图构建(map&reduce)的内存消耗非常高,以及将更大的JSON文档导入CouchDB.我评估了Ubuntu系统上的视图构造功能(4核,Intel®Xeon®CPUE3-1240 v5 @ 3.50GHz).结果如下:
内存消耗似乎是原始JSON数据集的数百倍.如果我们使用1 GB数据集,那么CouchDB就会耗尽内存.有谁知道内存消耗如此巨大的原因?非常感谢!
我目前正在使用VisualVM,但我遇到的问题是我无法保存它生成的图形.我需要报告一些有关其内存使用情况和运行时间的数据,但运行时间很容易System.nanoTime().我也尝试过NetBeans探查器,但它不是我想要的,因为我不是在寻找那些会减慢速度的特定部件,所以这样就太过分了.最大的问题是它占用了太多的处理时间.另外,我不能像VisualVM一样轻松捕获/传输数据,至少就我所知.
理想情况下,最好的方法是调用一些方法,因为我可以更容易地获取信息,但是像VisualVM这样的任何实际上让我保存图形的东西都可以.与NetBeans分析器相比,VisualVM的性能也相当不错,但我认为这是因为我没有使用它的分析器.
我目前正在使用Ubuntu,但Windows 7很好.我宁愿有一个专门做这个的程序,因为那些没有的程序得到的信息很可能包含JVM和其他更好的东西.
好吧,显然,您可以保存当前会话的快照并最大化VisualVM中的窗口,这样您就可以使图表更大,拍摄快照并剪切它们......但这是一种黑客行为.更好的建议欢迎.
在Robert Sedgewick在第200页的Algorithms第四版中,它说"例如,如果你的计算机上有1GB内存(10亿字节),你就不能超过大约3200万个int值."
在计算之后我感到困惑:1,000,000,000字节/ 4字节= 2.5亿
作者如何获得3200万?
这本书描述如下:
language-agnostic integer memory-consumption data-structures
有没有办法在numpy数组上进行重构,但是就地.我的问题是我的阵列非常大,所以任何不必要的副本都不会给内存带来压力.
我目前的做法是这样的:
train_x = train_x.reshape(n,32*32*3)
Run Code Online (Sandbox Code Playgroud)
这并没有完全解决问题,因为它创建了一个新数组,然后将标签train_x赋予新数组.
在正常情况下这可以,因为垃圾收集器很快就会收集原始数组.
问题是我有这样的事情:
train_x, train_y = train_set
train_x = train_x.reshape(n,32*32*3)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,即使train_x不再指向原始数组,仍然有一个指向原始数组的指针train_set.
我想要一种方法将前一个数组的所有指针更改为这个新数组.有办法吗?
或许还有其他一些方法来处理这个/
我想知道在内存中为对象分配的真实空间.
我尝试用一些例子来解释:使用64位JVM,指针大小应该是8个字节,所以:
Object singletest = new Object(); 将占用8个字节来引用Object加上Object的大小Object arraytest = new Object[10]; 将需要8个字节来引用存储数组的位置加上8*10个字节来存储数组加上每个Object的大小int singleint = new int; 将只占用2个字节,因为int是基本类型int[] arrayint = new int[10]; 将占用8个字节来引用位置,并将10*2个字节用于元素而且,这就是Java允许编写这样的代码的原因:
int[][] doublearray = new int[2][];
int[0][] = new int[5];
int[1][] = new int[10];
Run Code Online (Sandbox Code Playgroud)
真正发生的是一个数组会产生一个像对象一样的引用(也就是指针),因此在声明时它并不重要第二维的大小(维度可能不同,它们之间没有链接).然后所采用的空间将是:对doublearray(8字节)的引用,第一维只是对第二维的引用,所以其他8字节*2(第一维尺寸),最后2字节*5加2字节*10 .
所以,最后,如果有这样一个真正的类:
class Test {
int a, b;
int getA() {return A};
void setA(int a) {this.a = a;}
int getB() {return B};
void setB(int b) {this.b = b;}
}
Run Code Online (Sandbox Code Playgroud)
当我调用new来实例化时,将使用8字节的指针(或它引用的名称,因为它是Java)加上2 + 2bytes来将整数存储到类中.
问题是:我是对的,还是我写完废话?此外,当我没有实例化一个对象但我只是声明它时,将分配8个字节以供进一步使用?如果我指定一个空值怎么办?
同时对于原始类型我很确定只是声明它将分配所请求的空间(如果我声明一个"int i"然后我可以立即调用i ++因为没有使用引用,只有一部分内存被设置为"0" ). …
我正在将csv数据从文件加载到数据表中进行处理。
问题是,我要处理多个文件,而对数据表的测试显示了我对37MB的csv文件进行测试所消耗的大量内存,并且内存增长到了240MB,这对许多恕我直言都是如此。我读到,数据表中有开销,我可以承受大约70MB的大小,而不是240MB,这意味着它是原始大小的六倍。我在这里读到,数据表比POCO需要更多的内存,但是差异太大了。
我戴上内存分析器,看一下是否有内存泄漏以及内存在哪里。我发现,数据表列的字符串填充在6MB到19MB之间,数据表约有20列。值存储在列中吗?为什么要占用这么多内存,我该怎么做以减少内存消耗。由于这种内存消耗,数据表似乎无法使用。
有人是否对数据表有这样的问题,或者我做错了什么?
PS:我尝试了一个70MB的文件,数据表增长到了500MB!
好的,这里有个小测试用例:37MB的csv文件(21列)使内存增长到179MB。
private static DataTable ReadCsv()
{
DataTable table = new DataTable();
table.BeginLoadData();
using (var reader = new StreamReader(File.OpenRead(@"C:\Develop\Tests\csv-Data\testdaten\test.csv")))
{
int y = 0;
int columnsCount = 0;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
if (y == 0)
{
columnsCount = values.Count();
// create columns
for (int x = 0; x < columnsCount; x++)
{
table.Columns.Add(new DataColumn(values[x], typeof(string)));
}
}
else
{
if (values.Length == columnsCount)
{
// add the data …Run Code Online (Sandbox Code Playgroud) 我写了一个小程序,生成数组,运行时间很长(几乎永远;-)):
var results = [];
var i = 1;
while (true) {
console.log(i++);
results.push([]);
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个长度稀疏的数组而不是空数组时,i程序崩溃得非常快:
var results = [];
var i = 1;
while (true) {
console.log(i);
results.push(new Array(i++));
}
Run Code Online (Sandbox Code Playgroud)
实际上我起床i等于17424,然后我收到一条错误消息告诉我
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
和Node.js带我回到控制台.由于唯一的区别是第二个产生比前一个更大的"空"数组,这意味着一个空的稀疏长度数组n占用了n具有长度的空数组的空间1.
我是对的(特别是Node.js)吗?
还有一个问题:如果我跑了
var results = [];
var i = 1;
while (true) {
console.log(i);
var temp = [];
temp[i++] = i;
results.push(temp);
}
Run Code Online (Sandbox Code Playgroud)
然后我起床到1286175,然后再次崩溃: …
我编写了以下函数,以在给定列表“ lst”中找到给定项“ x”,并在找到后返回其索引,否则将返回错误:
exception Failure of string
let rec func x lst c = match lst with
| [] -> raise(Failure "Not Found")
| hd::tl -> if (hd=x) then c else func x tl (c+1)
let find x lst = func x lst 0
Run Code Online (Sandbox Code Playgroud)
该功能可以正常使用,我只是想知道它的内存消耗是多少?这意味着内存消耗是否取决于列表的长度?还是O(1)?
如果不是O(1),有人可以让我知道该怎么做吗?
谢谢
您如何定义docker中google cadvisor提供的内存使用率指标?它是动态堆栈大小,堆需求,高速缓存未命中,代码大小,交换内存还是RAM内存?以及cpu的累计使用量,以哪个度量单位计算?您如何定义它?是否有任何文档?
注意:我记得cadvisor容器将资源使用情况数据导出到influxDB。他要导出的指标包括:memory_usage,cpu_cumulative_usage等。
谢谢