aşağıdaki video da gosteriliyor ki bir metod cagirildigi zaman stackde metod ve metod icindeki değişkenler icin yer ayriliyor.eger obje yaratılmışsa obje ve objenin elemanlari icin heap de yer ayrılmış.referans ise stack te tutulmuş.Ama videodaki metodlar ve değişkenler arasinda static olani yok.Sorum şu: Eger değişken ve ya metod static olursa ve ya obje static olursa onun icin nerede yer ayrilir?(heaptemi yoksa stacktemi).bunun icin ayrintili dokuman varsa cok iyi olurdu Teşekkürler.

Video

soruldu: 23 Eyl '12, 06:28

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%

değiştirildi: 08 Tem '13, 09:21

AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AliRıza Adıyahşi ♦
7.9k146288

Türkçe karakterleri 2 harf ile belirtmek yerine tek harfle belirtirseniz yazınız daha kolay okunur ve anlaşılır. Örneğin ashagi yerine asagi, deyishen yerine degisken vs. şeklinde yazmanızı öneririm.

(23 Eyl '12, 12:21) rahmanyazgan ♦ rahmanyazgan's gravatar image
3

Rahman, azeri olabilir :)

(24 Eyl '12, 03:14) Turgay Can Turgay%20Can's gravatar image

Bir uygulama çalışırken, programa ait veriler hafızada tutulmak zorundadır. Bir nesne için ne kadar hafızaya gerek olduğu, nerede ve nasıl tutulacağı nesnenin tipine göre belirlenir.

Çalışan bir uygulama, verileri tutmak için iki hafıza alanından faydalanır: stack ve heap.

STACK
Stack, hafıza alanındaki bir dizi gibidir ve son giren ilk çıkar ( LIFO ) prensibine göre davranır. Birkaç veri tipini tutar ki bunlar;

  • Belirli tipdeki değişkenlere ait değerleri
  • Uygulamanın ortam bilgisini
  • Metodlara geçirilen parametreleri

HEAP
Heap hafıza alanındaki bir bölgedir ve belirtli tipteki nesnelere ait verileri tutar. Stack' ten farkı, veri heap alanına gelişigüzel yazılır ve silinir. Uygulamanız heap alanında veri tutabilir fakat sizin bunu bilinçli (explicit) olarak silmenize müsade etmez (C# ve Java mantığına göre konuşuyorum ki GC dediğimiz olay bu işi üzerine alır).

Gelelim Value (değer) ve Reference (referans) veri tiplerine.
Bir değişkenin/verinin tipi hafıza alanında ne kadarlık bir yer ayrılacağına ve nelerden oluşacağına karar verir. Ayrıca, değişkenin/verinin tipi de nerede saklanılacağı hakkında fikir de verir, ki bu stack veya heap alanı olabilir.

Tipler, value ve reference olmak üzere ikiye ayrılırlar. Bu tiplere ait nesneler farklı alanlarda tutulurlar.

  • value tipler hafızanın sadece bir bölümüne ihtiyaç duyarlar ki burada sadece güncel veriyi tutarlar.
  • reference tipler hafızanın iki bölümüne ihtiyaç duyarlar
    1. Güncel verinin tutulduğu kısım ki bu heap alanıdır.
    2. Diğeri ise, bu verinin hafızanın neresinde tutulduğuna dair referanstır ve stack alanında tutulur.

Uzun lafın kısası :

public int user_id = 150;

dediğinde, verinin tipi ìnt olduğu için, int in kapasitesi belli olduğuna göre ayrılacak alan bellidir. Dolayısıyla, user_id değişkeni stack alanında, 150 değeride yine stack alanında tutulur.

class Users
{
    public int user_id = 150;
}
user = new Users();
user.user_id = 175;

user = new Users(); dediğinde ise, yeni bir nesne yaratmış olursun, dolayısıyla bu nesneye ait referans stack alanında tutulur, yani user değişkeni stack alanında yer alır. user.user_id = 175; dediğinde ise, stack alanındaki user nesnesinin, heap alanındaki değeri olan 175 e referanslamış olursun.

alt text

Donanımsal ( hardware ) Olarak Stack
Bu konuda, wikipedia da bir belge mevcut. Kısaca, stack için CPU tarafından ayrılmış bir alan olarak bahsediliyor. Teknik bir konu olduğu için detayına giremiyorum çünki hardware konusunda bilgim kısıtlı.

Hardware Stack

permanent link

cevaplandı: 22 Haz '13, 06:10

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

değiştirildi: 22 Haz '13, 08:37

Özenli anlatımınız için teşekkür ederim. Genel olarak nesnelerin stack ve heap ile olan ilişkileri konusunda bilgi sahibiyim fakat hala static değişkenlerin bellekte nerede tutulduğu hakkında fikir sahibi değilim. Bu konuda bilgi verirseniz sevinirim.

İyi günler...

(22 Haz '13, 06:42) gceylan gceylan's gravatar image
1

Bellekte nerede tutulduklarına dair bir bilgi mevcut değil fakat donanımsal olarak olaya baktığımızda, wikipedia daki belgede, cpu tarafından ayrılmış bir alan olarak bahsediliyor ve belirli bir boyutu ve bölgesi olduğu söyleniyor. İncelemeni tavsiye ederim.

(22 Haz '13, 08:39) Oğuz Çelikdemir O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Merhaba Arkadaşlar,

Java Heap JVM tarafından oluşturulur ve aşağıdaki hafıza alanlarından oluşur: Eden – new operatörü ile oluşturulan tüm nesneler önce bu hafıza alanında oluşturulur. Survivor – nesneler old heap hafıza alanına transfer edilmeden önce bir müddet survivor hafıza alanlarında kalır. Buradaki amaç kısa ömürlü olan nesnelerin Garbage Collector tarafından toplanmasına ve old heap alanına geçmelerini engellemektir. Old – uzun ömürlü nesnelerin ölene kadar kaldıkları hazıfa alanıdır.

Permanent – sınıfların ve statik değerlerin yer aldığı hazıfa alanıdir.

http://www.kurumsaljava.com/2012/05/12/java-heap/ ÖzcanAcar ağabeyimizin bu konu hakkındaki makalesinde buldum :)


permanent link

cevaplandı: 08 Tem '13, 08:04

omrfrkklk's gravatar image

omrfrkklk
275136
cevap kabul oranı: 13%

Teşekkürler...

(08 Tem '13, 08:48) gceylan gceylan's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×5
×1

Soruldu: 23 Eyl '12, 06:28

Görüntüleme: 1,562 kez

Son güncelleme: 08 Tem '13, 09:21

powered by BitNami OSQA