|
|
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Простой вопрос, но вижу на него в Ководствах два разных ответа. Код: java 1. Старое Ководство (Sierra, "SCJP Sun Certified Programmer for Java 6 Exam 310-065" pg. 472) утверждает, что JVM при этом: 1) создаст новый объект в non-pool области, и переменная s1 будет ссылаться на него; 2) добавит литерал "John" в String Pool. Новое ководство по сдаче 1z0-803 (M. Gupta, "OCA Java SE7, programmer-I, certification guide, prepare for 1z0-803 exam") на странице 178 говорит, что вышеприведенное выражение:Gupta, 1z0-803, pg. 178creates new String object with the value "Summer". This object is not placed in the String constant poolСам объект-то, понятное дело, в пул не будет затолкан. А вот литерал, на основе которого он был создан ("Summer") - что с ним ? Будет он в пуле или нет ? Если да, то как это понять из кода конструктора в исходнике класса String: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. PS. И еще: содержимое String Pool'a - его как-то можно посмотреть или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 14:49:04 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisString s1 = new String("Summer"); 2) добавит литерал "John" в String Pool. Здесь 2 экземпляра строки. Один создан через new. Он не в пуле. Первый создан из литерала. Он в пуле. ozzmosisThis object is not placed in the String constant pool Сам объект-то, понятное дело, в пул не будет затолкан. А вот литерал, на основе которого он был создан ("Summer") - что с ним ? Ничего не поменялось. Речь про созданный объект. ozzmosisЕсли да, то как это понять из кода конструктора в исходнике класса String: Брр. Сказано же, что вызов констркутора не помещает строку в пул. Вот в конструкторе и ничего нет про пул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 14:55:08 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПервый создан из литерала. Он в пуле.где в исходниках явы можно увидеть, как она толкает в пул литерал ? и как посмотреть содержимое этого пула ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 14:59:34 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
PS. И что мешает яве задействовать стринговый пул при повторной встрече с тем же самым выражением: Код: java 1. - ? (в конструкторе используется литерал ==> компилятор должен знать, что прежде чем создавать такой объект, надо бы пошарить в пуле) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:03:59 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisгде в исходниках явы можно увидеть, как она толкает в пул литерал ? String.intern() -> JVM_InternString -> jvm.cpp -> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. -> sun.jvm.hotspot.memory.StringTable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:05:03 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisPS. И что мешает яве задействовать стринговый пул при повторной встрече с тем же самым выражением: Код: java 1. То что адекватный девелопер напишет String s2 = "Summer"; и получит ссылку на строку из пула. А если девелопер пишет new String(), то он явно хочет не пулированую строку, которую никто больше нигде в системе не использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:06:52 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА если девелопер пишет new String(), то он явно хочет не пулированую строку, которую никто больше нигде в системе не использует.Если строки в яве нельзя изменить после своего создания, то что значит "использует" (еще кто-то) ? Ну, пусть через 1 минуту эту строку "используют" уже 100500 раз - и что с того ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:14:29 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisЕсли строки в яве нельзя изменить после своего создания Ну, как... Не то чтобы совсем "нельзя". ozzmosis, то что значит "использует" (еще кто-то) ? Ну, например, синхронизируются на ней. ozzmosisНу, пусть через 1 минуту эту строку "используют" уже 100500 раз - и что с того ? Ничего. Это вообще оффтопик пошел. Вопрос не в том как и почему надо писать = new String() и = "". А в том, что фактически при этом происходит в JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:44:16 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВопрос не в том как и почему надо писать = new String() и = "". А в том, что фактически при этом происходит в JVM.пардон, но мой вопрос был в другом: почему JVM не смотрит сначала в String Pool, чтобы взять оттуда строку и присвоить новой переменной адрес этой строки, когда натыкается на второе и последующие выражения типа такого: Код: java 1. (в предположении, что String s1 = new String("Summer"); - уже "проскакивало" до того). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 16:03:26 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisпардон, но мой вопрос был в другом: почему JVM не смотрит сначала в String Pool, чтобы взять оттуда строку и присвоить новой переменной адрес этой строки, когда натыкается на второе и последующие выражения типа такого: Код: java 1. (в предположении, что String s1 = new String("Summer"); - уже "проскакивало" до того). Пардон, я на этот вопрос уже ответил. Повторять в теме одно и то же не обязательно. 15109418 Если что-то не понятно в ответе, то задайте вопрос в контексте ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 16:07:12 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Даже в JavaDoc вышеприведенного конструтора написано RTFMUnless an explicit copy of original is needed, use of this constructor is unnecessary since Strings are immutable. Простыми словами - "вам этот конструктор 300 лет не нужен, пока вы не решите явно создавать копии." При этом совершенно не важно по какой причине кто-то захочет создавать эти копии. Главное что такая возможность есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 16:14:34 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczozzmosisпардон, но мой вопрос был в другом: почему JVM не смотрит сначала в String Pool, чтобы взять оттуда строку и присвоить новой переменной адрес этой строки, когда натыкается на второе и последующие выражения типа такого: Код: java 1. (в предположении, что String s1 = new String("Summer"); - уже "проскакивало" до того). Пардон, я на этот вопрос уже ответил. Повторять в теме одно и то же не обязательно. 15109418 Если что-то не понятно в ответе, то задайте вопрос в контексте ответа.я прочитал внимательно и этот ответ, и исходник String.java (где говорится про "use of this constructor is unnecessary"). Напрашивается единственный вывод: юзать этот конструктор могут либо неадекваты, либо те, кто пишет код и сразу же делает "закладку" для решения проблем (за счет заказчика, разумеется :)). Зачем он тогда вообще в языке оставлен ? "Проcто, чтобы было" ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:13:07 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisя прочитал внимательно и этот ответ, и исходник String.java (где говорится про "use of this constructor is unnecessary"). Напрашивается единственный вывод: юзать этот конструктор могут либо неадекваты, либо те, кто пишет код и сразу же делает "закладку" для решения проблем (за счет заказчика, разумеется :)). Зачем он тогда вообще в языке оставлен ? "Проcто, чтобы было" ?? Никогда не говори "никогда". Это тяжело взять и сходу представить зачем что-то нужно. А вот когда в ответственный момент оно резко понадобиться, а его вдруг нет, то это намного хуже. https://www.google.com/search?q=any reason to use String constructor -> http://stackoverflow.com/questions/465627/use-of-the-stringstring-constructor-in-java -> http://kjetilod.blogspot.com/2008/09/string-constructor-considered-useless.html Но статья может быть не актуальной. В последних апдейстах Java 7 менялось внутреннее представление строки в классе String. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:19:29 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвот когда в ответственный момент оно резко понадобиться, а его вдруг нет, то это намного хуже. https://www.google.com/search?q=any reason to use String constructor -> http://stackoverflow.com/questions/465627/use-of-the-stringstring-constructor-in-java -> http://kjetilod.blogspot.com/2008/09/string-constructor-considered-useless.html Но статья может быть не актуальной. В последних апдейстах Java 7 менялось внутреннее представление строки в классе String.Спасибо, ушёл читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:41:39 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosis, извините что не по теме, но это вам для чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:43:01 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
ozzmosisЗачем он тогда вообще в языке оставлен ? "Проcто, чтобы было" ?? To Код: java 1. or not to Код: java 1. That is the question. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:43:51 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 17:48:23 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ну да - начиная с 7u6 оно не требуется. Но общий принцип поясняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 18:00:46 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
javapeckerozzmosis, извините что не по теме, но это вам для чего?Результаты глубокого бурения в итоге оседают на дне подкорки :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:37:25 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz http://kjetilod.blogspot.com/2008/09/string-constructor-considered-useless.html Но статья может быть не актуальной. В последних апдейстах Java 7 менялось внутреннее представление строки в классе String.Еще раз - большое спасибо, особенно за этот тынц. Весьма познавательно. ps. вот и думай теперь, ЧТО хотели сказать авторы класса String: String docUnless an explicit copy of {@code original} is needed, use of this constructor is unnecessary since Strings are immutable.А оказывается, тут целая собака порылась: k0deif you have some code like this: Код: plaintext 1. 2. 3. You'll now have a String s2 which, although it seems to be a one-character string, holds a reference to the gigantic char array created in the String s. This means the array won't be garbage collected , even though we've explicitly nulled out the String s! The fix for this is to use our previously mentioned "useless" String constructor like this: Код: plaintext It's not well-known that this constructor actually copies that old contents to a new array if the old array is larger than the count of characters in the string. This means the old String contents will be garbage collected as intended. Happy happy joy joy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:51:38 |
|
||
|
String [constant] pool. Вопросы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczozzmosisString s1 = new String("Summer"); 2) добавит литерал "John" в String Pool. Здесь 2 экземпляра строки. Один создан через new. Он не в пуле. Первый создан из литерала. Он в пуле. Интересно, а можно ли что-то написать, и что, на Java, чтобы создавалась только одна строка ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 22:45:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38460486&tid=2128215]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 391ms |

| 0 / 0 |
