JVMలో జ్ఞాపకశక్తిని అర్థం చేసుకోవడం
మీకు ఇప్పటికే తెలిసినట్లుగా, JVM దానిలోనే జావా ప్రోగ్రామ్లను అమలు చేస్తుంది. ఏదైనా వర్చువల్ మెషీన్ వలె, దాని స్వంత మెమరీ సంస్థ వ్యవస్థ ఉంది.
అంతర్గత మెమరీ లేఅవుట్ మీ జావా అప్లికేషన్ ఎలా పనిచేస్తుందో సూచిస్తుంది. ఈ విధంగా, అప్లికేషన్లు మరియు అల్గారిథమ్ల ఆపరేషన్లో అడ్డంకులను గుర్తించవచ్చు. ఇది ఎలా పని చేస్తుందో చూద్దాం.
ముఖ్యమైనది! అసలు జావా మోడల్ సరిపోదు, కనుక ఇది జావా 1.5లో సవరించబడింది. ఈ సంస్కరణ నేటికీ ఉపయోగించబడుతోంది (జావా 14+).
థ్రెడ్ స్టాక్
JVM అంతర్గతంగా ఉపయోగించే జావా మెమరీ మోడల్ మెమరీని థ్రెడ్ స్టాక్లు మరియు హీప్లుగా విభజిస్తుంది. జావా మెమరీ మోడల్ను చూద్దాం, తార్కికంగా బ్లాక్లుగా విభజించబడింది:
JVMలో నడుస్తున్న అన్ని థ్రెడ్లు వాటి స్వంత స్టాక్ను కలిగి ఉంటాయి . స్టాక్, థ్రెడ్ ఏ పద్ధతులను పిలిచిందనే దాని గురించి సమాచారాన్ని కలిగి ఉంటుంది. నేను దీనిని "కాల్ స్టాక్" అని పిలుస్తాను. థ్రెడ్ దాని కోడ్ను అమలు చేసిన వెంటనే కాల్ స్టాక్ మళ్లీ ప్రారంభమవుతుంది.
థ్రెడ్ యొక్క స్టాక్లో థ్రెడ్ స్టాక్లో పద్ధతులను అమలు చేయడానికి అవసరమైన అన్ని స్థానిక వేరియబుల్స్ ఉన్నాయి. థ్రెడ్ దాని స్వంత స్టాక్ను మాత్రమే యాక్సెస్ చేయగలదు. స్థానిక వేరియబుల్స్ ఇతర థ్రెడ్లకు కనిపించవు, వాటిని సృష్టించిన థ్రెడ్కు మాత్రమే. రెండు థ్రెడ్లు ఒకే కోడ్ని అమలు చేస్తున్నప్పుడు, అవి రెండూ తమ స్వంత స్థానిక వేరియబుల్లను సృష్టిస్తాయి. అందువలన, ప్రతి థ్రెడ్ ప్రతి స్థానిక వేరియబుల్ యొక్క దాని స్వంత సంస్కరణను కలిగి ఉంటుంది.
ఆదిమ రకాలైన అన్ని స్థానిక వేరియబుల్స్ ( బూలియన్ , బైట్ , షార్ట్ , చార్ , ఇంట్ , లాంగ్ , ఫ్లోట్ , డబుల్ ) పూర్తిగా థ్రెడ్ స్టాక్లో నిల్వ చేయబడతాయి మరియు ఇతర థ్రెడ్లకు కనిపించవు. ఒక థ్రెడ్ ఆదిమ వేరియబుల్ యొక్క కాపీని మరొక థ్రెడ్కు పంపగలదు, కానీ ఆదిమ స్థానిక వేరియబుల్ను భాగస్వామ్యం చేయదు.
కుప్ప
ఏ థ్రెడ్ ఆబ్జెక్ట్ని సృష్టించినప్పటికీ, మీ అప్లికేషన్లో సృష్టించబడిన అన్ని ఆబ్జెక్ట్లను హీప్ కలిగి ఉంటుంది. ఇందులో ఆదిమ రకాల రేపర్లు ఉంటాయి (ఉదాహరణకు, బైట్ , పూర్ణాంకం , లాంగ్ , మరియు మొదలైనవి). ఆబ్జెక్ట్ సృష్టించబడి స్థానిక వేరియబుల్కు కేటాయించబడిందా లేదా మరొక వస్తువు యొక్క మెంబర్ వేరియబుల్గా సృష్టించబడిందా అనేది పట్టింపు లేదు, అది కుప్పపై నిల్వ చేయబడుతుంది.
దిగువన కాల్ స్టాక్ మరియు స్థానిక వేరియబుల్స్ (అవి స్టాక్లలో నిల్వ చేయబడతాయి) అలాగే వస్తువులు (అవి కుప్పపై నిల్వ చేయబడతాయి) వివరించే రేఖాచిత్రం:
స్థానిక వేరియబుల్ ఆదిమ రకంగా ఉన్న సందర్భంలో, అది థ్రెడ్ స్టాక్లో నిల్వ చేయబడుతుంది.
స్థానిక వేరియబుల్ కూడా ఒక వస్తువుకు సూచనగా ఉంటుంది. ఈ సందర్భంలో, సూచన (స్థానిక వేరియబుల్) థ్రెడ్ స్టాక్లో నిల్వ చేయబడుతుంది, కానీ వస్తువు కూడా కుప్పపై నిల్వ చేయబడుతుంది.
ఒక వస్తువు పద్ధతులను కలిగి ఉంటుంది, ఈ పద్ధతులు స్థానిక వేరియబుల్లను కలిగి ఉంటాయి. పద్ధతిని కలిగి ఉన్న వస్తువు కుప్పపై నిల్వ చేయబడినప్పటికీ, ఈ స్థానిక వేరియబుల్స్ థ్రెడ్ స్టాక్లో కూడా నిల్వ చేయబడతాయి.
ఆబ్జెక్ట్ యొక్క మెంబర్ వేరియబుల్స్ వస్తువుతో పాటు కుప్పపై నిల్వ చేయబడతాయి. మెంబర్ వేరియబుల్ ఆదిమ రకంగా ఉన్నప్పుడు మరియు ఆబ్జెక్ట్ రిఫరెన్స్గా ఉన్నప్పుడు ఇది నిజం.
స్టాటిక్ క్లాస్ వేరియబుల్స్ క్లాస్ డెఫినిషన్తో పాటు హీప్లో కూడా నిల్వ చేయబడతాయి.
వస్తువులతో పరస్పర చర్య
కుప్పపై ఉన్న వస్తువులను వస్తువుకు సూచన ఉన్న అన్ని థ్రెడ్ల ద్వారా యాక్సెస్ చేయవచ్చు. ఒక థ్రెడ్కు ఆబ్జెక్ట్కు యాక్సెస్ ఉంటే, అది ఆబ్జెక్ట్ యొక్క వేరియబుల్స్ను యాక్సెస్ చేయగలదు. రెండు థ్రెడ్లు ఒకే సమయంలో ఒకే వస్తువుపై ఒక పద్ధతిని కాల్ చేస్తే, అవి రెండూ ఆబ్జెక్ట్ మెంబర్ వేరియబుల్స్కు యాక్సెస్ను కలిగి ఉంటాయి, అయితే ప్రతి థ్రెడ్కి దాని స్వంత స్థానిక వేరియబుల్స్ కాపీ ఉంటుంది.
రెండు థ్రెడ్లు స్థానిక వేరియబుల్ల సమితిని కలిగి ఉంటాయి.లోకల్ వేరియబుల్ 2కుప్పపై భాగస్వామ్య వస్తువుకు పాయింట్లు (వస్తువు 3) ప్రతి థ్రెడ్లు దాని స్వంత సూచనతో స్థానిక వేరియబుల్ యొక్క స్వంత కాపీని కలిగి ఉంటాయి. వారి సూచనలు స్థానిక వేరియబుల్స్ మరియు అందువల్ల థ్రెడ్ స్టాక్లలో నిల్వ చేయబడతాయి. అయితే, రెండు వేర్వేరు సూచనలు కుప్పపై ఒకే వస్తువును సూచిస్తాయి.
దయచేసి జనరల్ గమనించండివస్తువు 3లింక్లను కలిగి ఉందివస్తువు 2మరియువస్తువు 4మెంబర్ వేరియబుల్స్గా (బాణాల ద్వారా చూపబడింది). ఈ లింక్ల ద్వారా, రెండు థ్రెడ్లను యాక్సెస్ చేయవచ్చువస్తువు 2మరియువస్తువు4.
రేఖాచిత్రం స్థానిక వేరియబుల్ను కూడా చూపుతుంది (స్థానిక వేరియబుల్ 1రెండు పద్ధతి నుండి ). దాని యొక్క ప్రతి కాపీ రెండు వేర్వేరు వస్తువులను సూచించే విభిన్న సూచనలను కలిగి ఉంటుంది (వస్తువు 1మరియువస్తువు 5) మరియు అదే కాదు. సిద్ధాంతపరంగా, రెండు థ్రెడ్లు రెండింటినీ యాక్సెస్ చేయగలవువస్తువు 1, కాబట్టివస్తువు 5వారు ఈ రెండు వస్తువులకు సూచనలను కలిగి ఉంటే. కానీ పై రేఖాచిత్రంలో, ప్రతి థ్రెడ్లో రెండు వస్తువులలో ఒకదానికి మాత్రమే సూచన ఉంటుంది.
వస్తువులతో పరస్పర చర్యకు ఉదాహరణ
కోడ్లో పనిని ఎలా ప్రదర్శించవచ్చో చూద్దాం:
public class MySomeRunnable implements Runnable() {
public void run() {
one();
}
public void one() {
int localOne = 1;
Shared localTwo = Shared.instance;
//... do something with local variables
two();
}
public void two() {
Integer localOne = 2;
//... do something with local variables
}
}
public class Shared {
// store an instance of our object in a variable
public static final Shared instance = new Shared();
// member variables pointing to two objects on the heap
public Integer object2 = new Integer(22);
public Integer object4 = new Integer(44);
}
రన్() పద్ధతి ఒకటి() పద్ధతిని పిలుస్తుంది మరియు ఒకటి() క్రమంగా రెండు() అని పిలుస్తుంది .
వన్() పద్ధతి ఆదిమ లోకల్ వేరియబుల్ (స్థానిక ఒకటి) రకం int మరియు స్థానిక వేరియబుల్ (స్థానిక రెండు), ఇది ఒక వస్తువుకు సూచన.
వన్() పద్ధతిని అమలు చేసే ప్రతి థ్రెడ్ దాని స్వంత కాపీని సృష్టిస్తుందిస్థానిక ఒకటిమరియుస్థానిక రెండుమీ స్టాక్లో. వేరియబుల్స్స్థానిక ఒకటిప్రతి థ్రెడ్ యొక్క స్టాక్లో ఉండటంతో ఒకదానికొకటి పూర్తిగా వేరు చేయబడుతుంది. ఒక థ్రెడ్ దాని కాపీకి మరో థ్రెడ్ ఎలాంటి మార్పులు చేస్తుందో చూడలేదుస్థానిక ఒకటి.
వన్() పద్ధతిని అమలు చేసే ప్రతి థ్రెడ్ దాని స్వంత కాపీని కూడా సృష్టిస్తుందిస్థానిక రెండు. అయితే, రెండు వేర్వేరు కాపీలుస్థానిక రెండుకుప్పపై ఉన్న అదే వస్తువును సూచించడం ముగించండి. వాస్తవం ఏమిటంటేస్థానిక రెండుస్టాటిక్ వేరియబుల్ ద్వారా సూచించబడిన వస్తువుకు పాయింట్లుఉదాహరణ. స్టాటిక్ వేరియబుల్ యొక్క ఒక కాపీ మాత్రమే ఉంది మరియు ఆ కాపీ కుప్పలో నిల్వ చేయబడుతుంది.
కాబట్టి రెండు కాపీలుస్థానిక రెండుఅదే భాగస్వామ్య ఉదాహరణను సూచించడం ముగించండి . షేర్ చేసిన ఉదాహరణ కూడా కుప్పలో నిల్వ చేయబడుతుంది. ఇది సరిపోతుందివస్తువు 3పై రేఖాచిత్రంలో.
షేర్డ్ క్లాస్లో ఇద్దరు సభ్యుల వేరియబుల్స్ కూడా ఉన్నాయని గమనించండి . మెంబర్ వేరియబుల్స్ ఆబ్జెక్ట్తో పాటు కుప్పపై నిల్వ చేయబడతాయి. ఇద్దరు సభ్యుల వేరియబుల్స్ రెండు ఇతర వస్తువులను సూచిస్తాయిపూర్ణ సంఖ్య. ఈ పూర్ణాంక వస్తువులు అనుగుణంగా ఉంటాయివస్తువు 2మరియువస్తువు 4రేఖాచిత్రంపై.
రెండు() పద్ధతి పేరుతో స్థానిక వేరియబుల్ని సృష్టిస్తుందని కూడా గమనించండిస్థానిక ఒకటి. ఈ లోకల్ వేరియబుల్ అనేది పూర్ణాంకం రకం వస్తువుకు సూచన . పద్ధతి లింక్ను సెట్ చేస్తుందిస్థానిక ఒకటికొత్త పూర్ణాంక ఉదాహరణను సూచించడానికి . లింక్ దాని కాపీలో నిల్వ చేయబడుతుందిస్థానిక ఒకటిప్రతి థ్రెడ్ కోసం. రెండు పూర్ణాంకాల ఉదంతాలు కుప్పపై నిల్వ చేయబడతాయి మరియు పద్ధతి అమలు చేయబడిన ప్రతిసారీ కొత్త పూర్ణాంక వస్తువును సృష్టిస్తుంది కాబట్టి, ఈ పద్ధతిని అమలు చేసే రెండు థ్రెడ్లు వేర్వేరు పూర్ణాంక ఉదాహరణలను సృష్టిస్తాయి . అవి సరిపోతాయివస్తువు 1మరియువస్తువు 5పై రేఖాచిత్రంలో.
పూర్ణాంకం రకం యొక్క షేర్డ్ క్లాస్లోని ఇద్దరు సభ్యుల వేరియబుల్లను కూడా గమనించండి , ఇది ఆదిమ రకం. ఈ వేరియబుల్స్ మెంబర్ వేరియబుల్స్ అయినందున, అవి ఇప్పటికీ వస్తువుతో పాటు కుప్పలో నిల్వ చేయబడతాయి. థ్రెడ్ స్టాక్లో స్థానిక వేరియబుల్స్ మాత్రమే నిల్వ చేయబడతాయి.
GO TO FULL VERSION