在Java中,ConcurrentHashMap是否有更好的multithreading解决方案.那我ConcurrentSkipListMap什么时候应该用?这是一种冗余吗?
这两者之间的多线程方面是否常见?
在Java中,如果变量的大小小于或等于32位,则赋值是原子的,但如果大于32位则不是.
在双重或长期分配的情况下,使用什么(易失性/同步)会更有效?
喜欢,
volatile double x = y;
Run Code Online (Sandbox Code Playgroud)
synchronized不适用于原始参数.在这种情况下如何使用synchronized?当然我不想锁定我的班级,所以this不应该使用.
如何获取系统或某个目录中所有链接文件的列表.我曾经创建链接,但随着时间的推移,它们变得无法管理.我想要一个目录中所有这些链接的列表.有人可以帮忙吗?
我在下面的一个实例中得到NullPointerException,而它的对应运行顺利.
public static void main(String[] args){
System.out.println(withTernary(null, null)); //Null Pointer
System.out.println(withIfElse(null, null)); //No Exception
}
private static Boolean withTernary(String val, Boolean defVal){
return val == null ? defVal : "true".equalsIgnoreCase(val);
}
private static Boolean withIfElse(String val, Boolean defVal){
if (val == null) return defVal;
else return "true".equalsIgnoreCase(val);
}
Run Code Online (Sandbox Code Playgroud)
在线版本中的台词main相反,它输出null的withIfElse,然后失败withTernary.
我正在使用以下java版本
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
Run Code Online (Sandbox Code Playgroud) 我使用LinkedHashMap了accessOrdertrue,随时允许最多500个条目作为数据的LRU缓存.但由于可扩展性问题,我想转向一些线程安全的替代方案.ConcurrentHashMap在这方面似乎很好,但缺乏的特点accessOrder和removeEldestEntry(Map.Entry e)发现LinkedHashMap.任何人都可以指向某些链接或帮助我简化实施.
java performance multithreading concurrenthashmap linkedhashmap
我使用了太阳网站的Out Of Memory帮助.引用的地方
内存不足:请求的阵列大小超过VM限制
这表示应用程序尝试分配大于堆大小的数组.例如,如果应用程序尝试分配512MB的数组但最大堆大小为256MB,则将抛出此错误.在大多数情况下,问题可能是堆大小太小或者错误导致应用程序尝试创建一个大小被计算为错误巨大的数组.
我试图模仿这个
import java.util.ArrayList;
import java.util.List;
public class JavaTest {
public static void main(String[] args){
long[] ll = new long[64*1024*1024];
}
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上
javac *.java;java -Xmx256m JavaTest
Run Code Online (Sandbox Code Playgroud)
但上面的线正在生产
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at JavaTest.main(JavaTest.java:7)
我错过了什么?
更新: 我的java版本是
$java -version java version "1.6.0_15" Java(TM) SE Runtime Environment (build 1.6.0_15-b03) Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode)
哪个选项更好更快?在空表上创建索引或在插入数据后创建唯一索引后插入数据.我有大约10M行要插入.哪个选项会更好,以便我可以减少停机时间.
我在Long类中找到了一个方法
public static long reverse(long i) {..}
这种方法有什么用?
我读到ConcurrentHashMap在多线程方面比Hashtable更好,因为在桶级别而不是映射宽锁定.每张地图最多可锁32次.想知道为什么32和为什么不超过32锁.
在我工作的地方,曾经有过每个文件超过百万行的文件.即使服务器内存超过10GB,8GB用于JVM,有时服务器会被暂停一段时间并扼杀其他任务.
我对代码进行了分析,发现虽然文件读取内存使用频繁增加千兆字节(1GB到3GB)然后突然恢复正常.似乎这种频繁的高内存和低内存使用会挂起我的服务器.当然这是由于垃圾收集.
我应该使用哪个API来读取文件以获得更好的性能?
现在我正在使用BufferedReader(new FileReader(...))读取这些CSV文件.
过程:我如何阅读文件?
更新
我这样读取30或31个文件(一个月的数据)并将符合条件存储在地图中.后来这张地图用于在不同的表格中获得一些罪魁祸首.因此必须读取并存储该数据.虽然我现在已经将HashMap部分切换到BerkeleyDB但是在读取文件时的问题是相同甚至更糟.
public static List<Long> abc = new ArrayList<Long>(){{ //Asks for SerialVersionUID
abc.add(5L);
abc.add(7L);
}};
public static List<Long> abc = new ArrayList<Long>();//Does not need SerialVersionUID
static{
abc.add(5L);
abc.add(7L);
}
Run Code Online (Sandbox Code Playgroud) Java垃圾收集器以优先级1运行,因此无法保证System.gc()在调用时实际执行.
有什么方法可以改变它的优先级吗?这将使我能够运行,如果我想.
java ×10
performance ×6
api ×2
atomic ×1
berkeley-db ×1
filereader ×1
find ×1
hardlink ×1
indexing ×1
insert ×1
jvm ×1
linux ×1
locking ×1
long-integer ×1
map ×1
oracle ×1
reverse ×1
shell ×1
sql ×1
symlink ×1
synchronized ×1
volatile ×1