Java line continuity and using the same string value to create a new line

I know that the title of the question is not very clear, sorry, I don’t know how to express it. I have a very simple Java implementation question that I want to focus on application performance, but also includes a string creation pattern in java.

I understand the concept of immutable strings in Java. I'm not sure I read somewhere that the following will not create two different String objects:

String name = "Sambhav";
String myName= "Sambhav";

I want to know how Java does this? Does he really look for the String value in the program memory and check its existence, and if it does not exist, then a new String object is created? In this case, obviously, this is a memory saving, but there are performance problems.

You can also say that I have this code:

  public void some_method(){
        String name = "Sambhav";
        System.out.println(name); //  or any random stufff
  }

, String? , ?

, ,

String name = "Sambhav";
String myName= "Sambhav";

- ,

String name = new String("Sambhav");
String myName= new String("Sambhav");

Java - , myName , ?

+4
4

- char char. . subString (int), split (String).

, , , String, .

line 1. String a = new String("SomeString");
line 2. a = "SomeStringChanged";

1 "SomeString" , a, " SomeString" String Pool

2 String Pool "SomeStringChanged" a. "SomeString" , , "SomeString" , gc.

line 3. String  b =  "SomeStringChanged";

SomeStringChanged " a b. , , " String Pool".

line 4. a = new String("SomeStringChanged");

, " SomeStringChanged" a

. ( char SomeStringChanged String Pool, )

line 5. a = new String("SomeStringChanged").intern();

, 4, , a b , "SomeStringChanged". char. intern()

line 6. String x = new String("SomeX");
line 7. String y = "SomeX";

6 SomeX String Pool. char .

7 SomeX,

Line 8 String s = new String(someStringVariable);

8 , .

char , String ​​ String , .. ( char).

+4

, ", , , , String .

String name = new String("Sambhav");
String myName= new String("Sambhav");

, String, char (, ). - new, Java . name!= MyName, name.equals(myName)

+3

String name = new String("Sambhav");

String myName = new String("Sambhav");

Java - , myName , ?

JVM String , hash.

String String pool.

( ) - String , String.

, Map<String, String> (, ) .

String.intern(), JDK.

JVM

Java 6 String pool Perma Gen. . , String.intern() , .

Java 7 8 heap hash-table.

hash-table (HashMap, WeakHashMap) hash , .

:

  • String.intern() Java 6 - (PermGen), JVM.

  • Java 7 8 . , Java 7 8.

  • -XX:StringTableSize JVM Java 7 8, . , - . ( ) , , . String.intern() ( Java WeakHashMap 4-5 ).

  • -XX:StringTableSize 1009 Java 7 25-50K Java 8.

+2

3 , . , , ; .

  • ; , ;

  • ;

  • new. , String , , ; , , - . ( ).

# 3 Java 6 OpenJDK . , String, . , String, char (, ), ( ).

, == ( , == equals).

+1

Source: https://habr.com/ru/post/1537197/


All Articles