מה הרעיון של בריכת מיתרים בג'אווה?



בריכת מיתרים בג'אווה היא מאגר מיתרים המאוחסן בזיכרון הערימה של ג'אווה. מדריך זה יעזור לך בגישה מפורטת לבריכת מיתרי Java עם דוגמאות.

שמעת על המונח 'בריכת מיתרים בג'אווה?' ובכן, אם לא, נחתת במקום הנכון. בריכת מיתרים בג'אווה היא מאגר מיתרים המאוחסן ב זיכרון ערימה. הבה נתעמק ונבין בפירוט את המושג הזה של מאגר מיתרי Java.

המצביעים הבאים נדונו במאמר זה:





בואו נתחיל!

קודם כל, הבה נבין כיצד בדיוק נוצר אובייקט מחרוזת!



כיצד ליצור מחרוזת?

כדי ליצור אובייקט String ב- Java, ישנן שתי דרכים:

  • באמצעות המפעיל החדש. לדוגמה,
מחרוזת s1 = מחרוזת חדשה ('ג'ואי')
  • שימוש בביטוי מילולי או קבוע. לדוגמה,
מחרוזת s1 = 'ג'ואי' (מילולי מחרוזת) או מחרוזת s1 = 'ג'ו' + 'y' (ביטוי קבוע של מחרוזת)

עכשיו, מהי מאגר המיתרים הזה שעליו אני מדבר ואיך יצירת מחרוזת ב- Java קשורה לכך. תן לי לצמצם את העומס!

שיטת system.exit תסיים את היישום.

מהי בריכת מיתרים בג'אווה?

בריכת מיתרים היא אזור אחסון בערמת ג'אווה.



הקצאת מחרוזות, כמו כולם הקצאת אובייקטים , מתגלה כעניין יקר בשני מקרי הזמן והזיכרון. ה- JVM מבצע כמה צעדים תוך כדי אתחול מילולי מחרוזות כדי להגדיל את הביצועים ולהפחית את תקרת הזיכרון. כדי להקטין את מספר אובייקטים מחרוזת שנוצרו ב- JVM, מחלקת מחרוזת שומרת על מאגר מחרוזות.

בכל פעם שנוצר מילולי מחרוזת, ה- JVM בודק תחילה את המאגר המילולי. אם המחרוזת כבר קיימת במאגר המיתרים, תחזור התייחסות למופע המאוחד. אם המחרוזת אינה קיימת בבריכה, אובייקט מחרוזת חדש מאותחל ומונח בבריכה.

לאחר לימוד המושג באופן תיאורטי, הרשו לי לספר לכם כיצד בריכת מיתרים עובדת בג'אווה שלב אחר שלב בעזרת מקרים פשוטים!

איך בריכת מיתרים עובדת בג'אווה?

כשיוצרים מחרוזת חדשה כזו:

מחרוזת s1 = “רחל”

JVM בודק אוטומטית אם אותו ערך קיים במאגר קבוע המחרוזות או לא.

  • אם כן, הוא תופס את הערך הקיים כבר.
  • אם לא, הוא יוצר מחרוזת חדשה בפני עצמה ומוסיף אותה למאגר המיתרים.

אם ברצונך לעצור התנהגות זו, צור מחרוזת באמצעות אופרטור חדש:

מחרוזת s1 = מחרוזת חדשה ('רחל')

כעת, אם אתה מוכן להוסיף מחרוזת זו ל- , ג'אווה מספקת לך שיטה הנקראת, שיטת intern () אתה יכול לקרוא לשיטת native () ילידים כך:

S1.intern ()

כעת, אראה לך את היישום והעבודה של מאגר המיתרים באמצעות דוגמה.

אבל לפני כן, תזכורת קצרה!

כידוע אם אתה משווה שני אובייקטים באמצעות אופרטור == זה משווה כתובות בזיכרון.

הסבר לדוגמא אדריכלות mvc בג'אווה

אז נשווה את המיתרים בעזרת == כדי להיות בטוחים לחלוטין שזה אותו אובייקט או לא.

עכשיו, נקפוץ לתהליך היישום שלנו.

זה-יש ויש לו מערכת יחסים בג'אווה

בריכת מיתרים בג'אווה: דיאגרמת זרימה

בריכת מיתרים - אדוריקה

בואו נבין מה קורה כאן שלב אחר שלב:

  • השיעור נטען כאשר מופעלת.
  • JVM מחפש את כל מילולי המיתרים בתוכנית
  • ראשית, הוא מוצא את המשתנה s1 המתייחס ל'אפל 'המילולי והוא נוצר בזיכרון
  • אזכור של 'אפל' המילולי מונח בזיכרון הבריכה הקבוע של המיתרים.
  • ואז הוא מוצא משתנה נוסף s2 המתייחס לאותו מחרוזת מילולית 'מנגו'.
  • ואז הוא מוצא משתנה אחר s3 המתייחס ל'אפל 'המילולי.
  • כעת, כאשר JVM כבר מצאה מחרוזת 'אפל' מילולית, גם המשתנים s1 וגם s3 יתייחסו לאותו אובייקט כלומר 'אפל'.

תוכנית Java לבריכת מיתרים

class class StringPoolExperiment {public static void main (String [] args) {String s1 = 'Rachel' String s2 = 'Rachel' String s3 = new String ('Rachel') String s4 = String new ('Rachel'). מתמחה ( ) System.out.println (s1 == s2) // true System.out.println (s1 == s3) // false System.out.println (s1 == s4) // true}}

תְפוּקָה:

נָכוֹן
שֶׁקֶר
נָכוֹן

בדוגמה שלעיל, אתה יכול לראות בבירור את השימוש באתחול מחרוזות בכל שלוש הדרכים, כלומר

מחרוזת s1 = 'רחל' מחרוזת s2 = 'רחל' מחרוזת s3 = מחרוזת חדשה ('רחל') מחרוזת s4 = מחרוזת חדשה ('רחל'). מתמחה ()

העבודה הפנימית של התוכנית צריכה אולי להיות ברורה כעת.

עם זאת הגעתי לקראת סוף הבלוג שלי. אני מקווה שהתכנים המפורטים כאן עזרו לך להרחיב את בסיס הידע שלך. נמשיך לצלול לתוך עולם הג'אווה. המשך לעקוב!

בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך התחלה בתכנות ג'אווה ולהכשיר אותך למושגי הליבה והמתקדמים של ג'אווה יחד עם מסגרות Java שונות כמו Hibernate & אביב .

יש לך שאלה עבורנו? אנא הזכיר זאת בקטע ההערות בבלוג 'מיתרי מיתרים בג'אווה' ונחזור אליך בהקדם האפשרי.