小编aar*_*njg的帖子

带有圆形对象引用的Ruby中的Garbarge集合

我在Ruby中遇到垃圾收集问题,我认为应该是垃圾收集的对象不是垃圾收集.

require 'ruby-mass'

def find_dependencies(_object_id,_mapped = {})
  mapped = _mapped
  points_to_object = Mass.references(Mass[_object_id])
  ids = points_to_object.keys.map{|x| /\#(\d*)/.match(x).captures.first.to_i}
  mapped[_object_id] = ids

  unmapped = ids - mapped.keys
  unmapped.each do |x|
    new_deps = find_dependencies(x,mapped)
    mapped.merge(new_deps)
  end
  mapped
end
Run Code Online (Sandbox Code Playgroud)

做一些制作对象的东西,并找到相关的对象ID.GC.start, 然后:

> find_dependencies(144789180)
=> {144789180=>[61895480, 144786340, 147807540],
 61895480=>[144789180],
 144786340=>[144789180],
 147807540=>[144789180]}
Run Code Online (Sandbox Code Playgroud)

看起来这里有一个圆形参考图案,但它们都完全包含在这四个对象中,因此Mark-and-Sweep收集器应该找到并删除它们.

所以,我的find_dependencies_function,Mass gem或Ruby的垃圾收集器都有一个bug.如何缩小范围以找出问题所在并解决此内存泄漏问题?

ruby garbage-collection

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

访问R mmap对象中的数据框列

我试图移植一些代码来使用mmap包.我在访问数据框列时遇到问题.

我希望能够使用$[[运算符访问数据列.这是我得到的结果.

> foo <- as.mmap(mtcars)
> foo[,'mpg'] # works
    mpg
1  21.0
2  21.0
3  22.8
4  21.4
5  18.7
 ...
> foo$mpg #does not work
NULL
> foo[['mpg']] #also does not work
NULL
> foo[]$mpg #works
...
> foo[][['mpg']] #also works
...
Run Code Online (Sandbox Code Playgroud)

有没有办法让$[[运算符在内存映射对象上工作,就像它们在常规数据帧上一样?

编辑:根据约书亚的建议,我添加了一个功能 [[

`[[.mmap` <- function(x,...) `[[`(x[],...)
Run Code Online (Sandbox Code Playgroud)

而且$这似乎并不特别优雅,但似乎有效.

> `$.mmap` <- function(x,...) {
  if (...%in%c("storage.mode","bytes","extractFUN","filedesc")){
    get(...,envir=x) 
  }else {
    eval(call('$',x[],substitute(...)))
  }}
Run Code Online (Sandbox Code Playgroud)

r

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

在R中创建一个非常大的稀疏矩阵

我试图在R中创建一个10 ^ 5×10 ^ 5的大型稀疏矩阵,但是遇到了内存问题.

> Matrix(nrow=1e5,ncol=1e5,sparse=TRUE)
Error in Matrix(nrow = 1e+05, ncol = 1e+05, sparse = TRUE) : 
  too many elements specified
Run Code Online (Sandbox Code Playgroud)

看起来这是因为元素的数量大于2 ^ 31,这是最大整数值.但我在64位机器上运行它.

> .Machine$integer.max
[1] 2147483647
Run Code Online (Sandbox Code Playgroud)

有没有办法创建如此庞大的稀疏矩阵?

r sparse-matrix

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

标签 统计

r ×2

garbage-collection ×1

ruby ×1

sparse-matrix ×1