Megjithatë, nuk kam parë kurrë deklarata të tilla, a ekziston fare në botën java?
A ka diçka si malloc/falas në java?
Përgjigjet:
Versioni i Java i malloc
është new
-- ai krijon një objekt të ri të një lloji të caktuar.
Në Java, memoria menaxhohet për ju, kështu që nuk mund të delete
ose free
në mënyrë eksplicite një objekt.
Java ka një grumbullues mbeturinash. Kjo është arsyeja pse ju nuk shihni kurrë deklarata të tilla në kodin tuaj (që është mirë nëse më pyesni mua)
Në shkencën kompjuterike, mbledhja e mbeturinave (GC) është një formë e menaxhimit automatik të kujtesës. Është një rast i veçantë i menaxhimit të burimeve, në të cilin burimi i kufizuar që menaxhohet është memoria. Mbledhësi i mbeturinave, ose thjesht mbledhësi, përpiqet të rikuperojë mbeturinat ose memorien e zënë nga objektet që nuk janë më në përdorim nga programi. Mbledhja e mbeturinave u shpik nga John McCarthy rreth vitit 1959 për të zgjidhur problemet në Lisp.
Nuk ekzistojnë ekuivalente të drejtpërdrejta në Java:
C malloc
krijon një nyje grumbulli të pashtypur dhe ju kthen në të një tregues që ju lejon të aksesoni memorien si të dëshironi.
Java nuk ka konceptin e një objekti të pashtypur dhe nuk ju lejon të aksesoni drejtpërdrejt memorien. Më e afërta që mund të merrni në Java me malloc
do të ishte new byte[size]
, por kjo ju kthen një objekt të shtypur fort që mund ta përdorni VETËM si një grup bajt.
C free
lëshon një nyje grumbulli.
Java nuk ju lejon të lëshoni në mënyrë eksplicite objekte. Shpërndarja e objekteve në Java është plotësisht në duart e grumbulluesit të plehrave. Në disa raste ju mund të ndikoni në sjelljen e GC; p.sh. duke i caktuar null
një variabël referimi dhe duke thirrur System.gc()
. Megjithatë, kjo nuk e detyron objektin të shpërndahet ... dhe është një mënyrë shumë e shtrenjtë për të vazhduar.
new
në vend të malloc
, grumbullues plehrash në vend të lirë.
Nëse nuk jeni të mirë (tm) supozoj se mund të keni akses në kujtesën e papërpunuar përmes ndërfaqes JNI. Këtu mund të telefononi programe C nga Java Programs. Sigurisht që duhet të ekzekutoni në një mjedis ku programi juaj ka privilegjet për ta bërë këtë (një shfletues normalisht nuk do ta lejojë këtë nëse nuk është vetëvrasës), por ju mund t'i qaseni objekteve nëpërmjet treguesve C në atë mënyrë.
Pyes veten se nga vjen pyetja origjinale. Në një moment shumë kohë më parë isha plotësisht skeptik për nocionin se menaxhimi i kujtesës në stilin C dhe treguesit e stilit C nuk ishin të nevojshëm, por në këtë pikë unë jam një besimtar i vërtetë.
unsafe
: msdn.microsoft.com/en-us/library/chfa2zb8(v=VS.100).aspx Ju lutemi, vini re se kjo është shumë, shumë rrallë e nevojshme. 10.12.2010