有一种情况会构建一个地图,一旦它被初始化,它将永远不会被再次修改.但是,它将从多个线程访问(仅通过get(key)).java.util.HashMap以这种方式使用是否安全?
(目前,我很高兴使用a java.util.concurrent.ConcurrentHashMap,并没有明确的需要提高性能,但我只是好奇,如果一个简单HashMap就足够了.因此,这个问题不是 "我应该使用哪一个?"也不是性能问题.相反,问题是"它会安全吗?")
我需要编写一个Java Comparator类来比较Strings,但是有一个转折.如果它比较的两个字符串在字符串的开头和结尾是相同的,并且不同的中间部分是整数,则根据这些整数的数值进行比较.例如,我希望以下字符串以它们显示的顺序结束:
如您所见,字符串中可能还有其他整数,因此我不能只使用正则表达式来分解任何整数.我正在考虑从一开始就走绳子,直到找到一点不匹配,然后走到最后,直到找到一个不匹配的位,然后比较中间的位到正则表达式"[0-9] +",如果比较,则进行数值比较,否则进行词法比较.
有没有更好的办法?
更新我不认为我可以保证字符串中的其他数字,可能匹配的数字,周围没有空格,或者不同的数字确实有空格.
在运行启用了本机内存跟踪的Java应用程序(在YARN中)时(-XX:NativeMemoryTracking=detail请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html和https:// docs. oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html),我可以看到JVM在不同类别中使用了多少内存.
我在jdk 1.8.0_45上的应用程序显示:
Native Memory Tracking:
Total: reserved=4023326KB, committed=2762382KB
- Java Heap (reserved=1331200KB, committed=1331200KB)
(mmap: reserved=1331200KB, committed=1331200KB)
- Class (reserved=1108143KB, committed=64559KB)
(classes #8621)
(malloc=6319KB #17371)
(mmap: reserved=1101824KB, committed=58240KB)
- Thread (reserved=1190668KB, committed=1190668KB)
(thread #1154)
(stack: reserved=1185284KB, committed=1185284KB)
(malloc=3809KB #5771)
(arena=1575KB #2306)
- Code (reserved=255744KB, committed=38384KB)
(malloc=6144KB #8858)
(mmap: reserved=249600KB, committed=32240KB)
- GC (reserved=54995KB, committed=54995KB)
(malloc=5775KB #217)
(mmap: reserved=49220KB, committed=49220KB)
- Compiler (reserved=267KB, committed=267KB)
(malloc=137KB #333)
(arena=131KB #3)
- Internal (reserved=65106KB, committed=65106KB)
(malloc=65074KB … 我有一个在JVM中运行的两个单独的缓存(一个由第三方库控制),每个缓存都使用软引用.我希望JVM在由库控制的缓存之前清除我的受控缓存.SoftReference javadoc指出:
在虚拟机抛出OutOfMemoryError之前,保证已清除对软可访问对象的所有软引用.否则,不会对清除软引用的时间或清除对不同对象的一组此类引用的顺序施加约束.但是,鼓励虚拟机实现偏向清除最近创建或最近使用的软引用.
该类的直接实例可用于实现简单的缓存; 此类或派生的子类也可用于更大的数据结构,以实现更复杂的高速缓存.只要软引用的引用是强可达的,即实际上是在使用中,软引用就不会被清除.因此,复杂的高速缓存可以例如通过保持对这些条目的强烈指示来防止其最近使用的条目被丢弃,留下剩余的条目由垃圾收集器决定丢弃.
常见的JVM实现(尤其是HotSpot)如何在实践中处理SoftReferences?他们是否"反对清除最近创建或最近使用的软参考",这是由规范所鼓励的?
我习惯使用PHP,但最近我一直在使用Java,而且我正在努力解决这个问题.我想在Java中保存这个表示:
Array (
["col_name_1"] => Array (
1 => ["col_value_1"],
2 => ["col_value_2"],
... ,
n => ["col_value_n"]
),
["col_name_n"] => Array (
1 => ["col_value_1"],
2 => ["col_value_2"],
... ,
n => ["col_value_n"]
)
)
是否有一种干净的方式(即没有脏代码)来保存这个东西在Java?注意; 我想使用字符串作为数组索引(在第一维度),我不知道数组的确定大小..
我试图在Windows下使用hadoop,当我想启动tasktracker时遇到问题.例如:
$bin/start-all.sh
Run Code Online (Sandbox Code Playgroud)
然后日志写道:
2011-06-08 16:32:18,157 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: /tmp/hadoop-Administrator/mapred/local/taskTracker to 0755
at org.apache.hadoop.fs.RawLocalFileSystem.checkReturnValue(RawLocalFileSystem.java:525)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:507)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:318)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:183)
at org.apache.hadoop.mapred.TaskTracker.initialize(TaskTracker.java:630)
at org.apache.hadoop.mapred.TaskTracker.<init>(TaskTracker.java:1328)
at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3430)
Run Code Online (Sandbox Code Playgroud)
有什么问题?我怎么解决这个问题?谢谢!
优秀的Guava库的最新版本更新了缓存apis.CacheBuilder现在有一个maxmimumWeight()方法来强制缓存的最大权重.javadoc说:
指定缓存可能包含的条目的最大权重.使用Weigher指定的Weigher确定权重,并且在调用build(com.google.common.cache.CacheLoader)之前,使用此方法需要对称重者进行相应的调用.
请注意,缓存可能会在超出此限制之前逐出条目.随着缓存大小接近最大值,缓存逐出不太可能再次使用的条目.例如,高速缓存可以驱逐一个条目,因为它最近或者经常没有使用过.
当Cache需要逐出一个条目时,它会考虑权重吗?例如,如果较大的重量条目比任何小的项目更频繁地使用,但是比所有小的项目一起使用更少,则保持几个小重量的条目可能比一个大重量的条目更好.
我需要存储发送电子邮件的时区.从电子邮件的"日期:"标题(RFC822日期)中提取它的最佳方法是哪种?什么是将其存储在数据库中的推荐格式(我正在使用hibernate)?
如果你有二进制字符串(字面意思是只包含1和0的String对象),你如何将它们作为位输出到文件中?
这是我正在研究的文本压缩器; 它仍然困扰着我,终于让它运转起来真好.谢谢!
使用Java,我需要对名称值对的Map <String,String>进行编码以存储到String中,并能够再次对其进行解码.这些将存储在数据库列中,并且通常可能简短,因此常见的情况应该产生一个简单漂亮的行,但不应该破坏数据,即使它包含意外的字符等.
你会如何选择这样做:
网址编码?JSON?自己做?请指定您使用的任何帮助程序库或方法.
(编辑以根据要求指定更多上下文和要求.)
java ×9
caching ×2
hashmap ×2
jvm ×2
string ×2
algorithm ×1
arrays ×1
comparison ×1
concurrency ×1
encoding ×1
guava ×1
hadoop ×1
hadoop-yarn ×1
jakarta-mail ×1
linux ×1
mapreduce ×1
memory ×1
sorting ×1
timezone ×1
windows ×1