Jump to content
Sign in to follow this  
Mock

collectgarbage()

Recommended Posts

Mock    32
Mock

Eu tava falando com socket agora no msn sobre uma função chamada newproxy, e falmos sobre a collectgarbage

ai nem eu e nem ele sabiamos usar collectgarbage()

entao fui procurar e descobri.

 

Supondo que temos isso:

local f = string.rep('a',1024*500*10)
print(f:len())

prit - > 5120000

vai ocupar cerca de 17mb de ram do pc.

E entao se fizermos isso:

local f = string.rep('a',1024*500*10)
print(f:len())
f = nil

Não vai mudar nada.

Mas se fiermos isso:

local f = string.rep('a',1024*500*10)
print(f:len())
f = nil
collectgarbage()

O uso de ram cai pra 2mb :coolface:

Não limpa tudo mais de 17mb pra 2 é muito \o

 

Agora isso é tenso:

do
 local a = newproxy(true)  -- create proxy object with new metatable
 assert(type(a) == 'userdata')
 getmetatable(a).__len = function() return 5 end
 assert(#a == 5)
 local b = newproxy(a)     -- create proxy object with same metatable as another proxy
 assert(b ~= a)
 assert(getmetatable( == getmetatable(a))
 assert(#b == 5)
 local c = newproxy(false) -- create proxy object with no metatable
 assert(not getmetatable(c))

 local is_collected = false
 local o = newproxy(true)
 getmetatable(o).__gc = function() is_collected = true end  -- finalizer
 o = nil; collectgarbage()  -- clear all references to object and ensure finalizer called
 assert(is_collected)
end

Não entendi direito pra que serve a newproxy, pelo que eu vi ela cria uma userdata com tamanho 0

http://lua-users.org/wiki/HiddenFeatures

Edited by Mickfern

Share this post


Link to post
Share on other sites
Dartier    0
Dartier

oloco isso é o uso de ram que o script consome ou geral do pc?

se ele diminuir o geral ia ser f0da

Share this post


Link to post
Share on other sites
Mock    32
Mock

O consumo do script e nao do pc

Share this post


Link to post
Share on other sites
Conde2    0
Conde2

@Mock

 

Já tentou fazer isso:

 

local f = string.rep('a',1024*500*10)
print(f:len())
_G[f] = nil

 

 

Acho que isso simularia o

collectgarbage()

Edited by Mickfern

Share this post


Link to post
Share on other sites
Mock    32
Mock

se é local n tem como tar na _G

N adianta nd

Share this post


Link to post
Share on other sites
100email    0
100email
prit - > 5120000

vai ocupar cerca de 17mb de ram do pc.

 

comu funssiona iço moq

kuantus numerosinhus tein ki ser pa okupa 1 mb?

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×