问题标签 [string-interning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 同步死锁(字符串实习生())
我用户 sun jdk 1.5 ThreadPoolExecutor(24, 24,60,TimeUnit.SECONDS, new LinkedBlockingQueue())。soemtime 我使用 jdb 工具查找线程池中所有线程的状态是“在监视器中等待”,代码是:
“同步(key.intern())”有问题吗?
我使用 jdb 工具得到以下信息,24 个线程的状态是“在监视器中等待”,这意味着 24 个线程在“key.intern()”处死锁。
(java.lang.Thread)0x28 pool-3-thread-2 在监视器中等待
(java.lang.Thread)0x27 pool-3-thread-3 在监视器中等待
(java.lang.Thread)0x1b pool-3-thread-4 在监视器中等待
(java.lang.Thread)0x1a pool-3-thread-5 在监视器中等待
(java.lang.Thread)0x19 pool-3-thread-6 在监视器中等待
(java.lang.Thread)0x18 pool-3-thread-7 在监视器中等待
(java.lang.Thread)0x17 pool-3-thread-8 在监视器中等待...
所以结果是:在多线程环境下,Sting intern() 方法可能会死锁,好吗?
c# - 泛型方法中的运算符重载
此代码片段来自 C# in Depth
上述代码片段的输出是
当 main 方法更改为
上述代码片段的输出是
我无法理解为什么?
编辑:一旦您了解字符串实习,以下问题将不适用。
AreReferencesEqual
第二个代码片段中
的通用方法如何接收参数?
当连接字符串类型以使 == 运算符不调用 String 类型的重载 Equals 方法时,它会发生什么变化?
c# - 为什么 .NET 创建新的子字符串而不是指向现有字符串?
从使用反射器的简要介绍来看,它看起来像是String.Substring()
为每个子字符串分配内存。我是正确的吗?我认为这没有必要,因为字符串是不可变的。
我的基本目标是创建一个IEnumerable<string> Split(this String, Char)
不分配额外内存的扩展方法。
c# - 实习字符串会帮助解析器的性能吗?
如果你在解析,就说HTML,一旦你读到元素名称,实习会有好处吗?这里的逻辑是这个解析器会一遍又一遍地解析相同的字符串(元素名称)?并且将解析几个文档。
理论:
这个问题的动机是问题string-interning-memory。
java - 何时在字符串文字上使用 intern()
我看到很多这样的遗留代码:
我看不出使用 intern() 的任何原因,正如在 Javadoc 中可以读到的那样:“所有文字字符串和字符串值常量表达式都是实习的。” 是否有这样的意图,也许在过去的语言版本中?
java - 我们什么时候应该在 String 字面量上使用 String 的 intern 方法
根据String#intern(),intern
如果在字符串池中找到字符串,则方法应该从字符串池中返回字符串,否则将在字符串池中添加一个新的字符串对象并返回该字符串的引用。
所以我尝试了这个:
我期待s1 and s3 are same
将在 s3 被实习时打印,并且s1 and s2 are same
不会打印。但结果是:两行都被打印了。这意味着,默认情况下 String 常量是实习的。但如果是这样,那我们为什么需要这个intern
方法呢?换句话说,我们什么时候应该使用这种方法?
java - Java、HashMaps 和使用字符串作为键 - 字符串值是否存储两次?
如果我有一个看起来像这样的 HashMap:
HashMap<String, MyObject>
其中String
键是 中的一个字段MyObject
,这个字符串值是否被存储两次?
所以当我添加条目时:
_myMap.put(myObj.getName(), myObj);
我在内存方面使用双倍的字符串大小吗?还是 Java 在幕后做了一些聪明的事情?
谢谢
c# - 时间:2019-04-01 标签:c#stringinterning
我试图理解字符串实习,为什么在我的例子中似乎不起作用。该示例的重点是显示示例 1 使用较少(少得多的内存),因为它在内存中应该只有 10 个字符串。但是,在下面的代码中,两个示例都使用大致相同的内存量(虚拟大小和工作集)。
请告知为什么示例 1 没有使用更少的内存?谢谢
示例 1:
示例 2:
python - 字符串是否在 Python 中汇集?
Python 是否有一个包含所有字符串的池,它们是(字符串)单例吗?
更准确地说,在下面的代码中,是在内存中创建了一个还是两个字符串?
c# - 字符串实习?
第二个 ReferenceEquals 调用返回 false。为什么 s4 中的字符串没有被实习?(我不关心 StringBuilder 相对于字符串连接的优势。)
当我这样做时String.Intern(s4);
,我仍然是假的。
在这里,s3 和 s4 都被实习了,但它们的引用不相等?