当使用getClass()和==运算符over instanceOf运算符时,我看到了性能的提升.
Object str = new Integer("2000");
long starttime = System.nanoTime();
if(str instanceof String) {
System.out.println("its string");
} else {
if (str instanceof Integer) {
System.out.println("its integer");
}
}
System.out.println((System.nanoTime()-starttime));
starttime = System.nanoTime();
if(str.getClass() == String.class) {
System.out.println("its string in equals");
} else {
if(str.getClass() == Integer.class) {
System.out.println("its integer");
}
}
System.out.println((System.nanoTime()-starttime));
Run Code Online (Sandbox Code Playgroud)
是否有任何准则,哪一个使用getClass()或instanceOf?
给定一个情景:我知道要匹配精确类,即String,Integer(这些都是final类)等.
使用instanceOf运算符不好的做法?
有没有办法,我可以通过它为spring bean设置setter方法的顺序.
例如:
<bean id="tester" class="commons.PropertyTester">
<property name="value1" value="${xyz}"></property>
<property name="value2" value="${abc}"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
在上面的场景中,value1的setter在value2的setter之前被调用.
当我颠倒属性的顺序如下
<bean id="tester" class="commons.PropertyTester">
<property name="value2" value="${port}"></property>
<property name="value1" value="${server}"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
在value1之前调用Value2 setter方法.
是否有任何优雅的方式可以强制在value2之前始终为value1调用setter.
一种方法是在value2的setter中抛出异常.为用户提供所需的顺序.还有其他方法吗?
我正在使用 SQL Server 2008 和 Java 6/Spring jdbc。
我们有一个记录数约为 6000 万条的表。
我们需要将整个表加载到内存中,但是在此表上触发 select * 需要几个小时才能完成。
所以我将查询拆分如下
String query = " select * from TABLE where " ;
for(int i =0;i<10;i++){
StringBuilder builder = new StringBuilder(query).append(" (sk_table_id % 10) =").append(i);
service.submit(new ParallelCacheBuilder(builder.toString(),namedParameters,jdbcTemplate));
}
Run Code Online (Sandbox Code Playgroud)
基本上,我通过在主键列上添加 where 条件来拆分查询,
上面的代码片段将查询拆分为 10 个并行运行的查询。这使用了 java 的ExecutorCompletionService。
我不是 SQL 专家,但我想上面的查询需要在主列上应用模运算符之前在内存中加载相同的数据。
这是好/坏/最好/最差的方式吗?还有其他方法吗,欢迎留言。
提前致谢!!!
我有项目模块,它被构建为osgi包(spring-dm).捆绑包正在karaf容器中部署.我有数据库交互classees,使用spring-jdbc开发.
我无法设置声明式事务,有人可以分享经验/指向我可以获取更多信息的资源.
框架与版本
卡拉夫:2.2.9
春季3.1.2.RELEASE
提前致谢!!
我需要一种方法来使用来自多个activemq jms队列的消息.
根据activemq文档,它支持通配符使用者
我使用camel作为消息传递总线.是否可以查看下面命名的队列
aaa.processQueue
bbb.processQueue
ccc.processQueue
Run Code Online (Sandbox Code Playgroud)
通过配置camel路由来查看activemq:*.processQueue 端点?
另请告诉我,如果有更清洁的选择.
我将ActiveMQ 5.8与在骆驼路线中配置的通配符使用者一起使用。
我正在使用默认的ActiveMQ配置,因此我具有以下默认值
prefetch = 1
dispatch policy= Round Robin
Run Code Online (Sandbox Code Playgroud)
现在,我启动了一个消费者jvm,其中每个队列有5个消费者。两个队列具有相同类型的消息和相同数量的消息。
消费者除了打印消息外什么都不做(因此没有数据库阻塞或缓慢的消费者问题)
编辑 我已将每个队列的preFetch设置为1
我观察到的是,一个队列比另一个队列更快地耗尽了资源。
我期望的是队列以相同的速度耗尽,这是一种负载平衡。
一个令人惊讶的发现是,尽管activemq Webconsole显示每个队列有5个使用者

调试使用者时,我仅从骆驼流中看到5个线程/使用者的通配符队列* .processQueue

上述行为的原因是什么?如何确保所有队列以相同的速度消耗?
是否有人在编写自定义调度策略或覆盖activemq的默认设置方面有经验可共享?
我有上面的代码作为Spark驱动程序,当我执行我的程序时,它正常工作将所需的数据保存为Parquet文件.
String indexFile = "index.txt";
JavaRDD<String> indexData = sc.textFile(indexFile).cache();
JavaRDD<String> jsonStringRDD = indexData.map(new Function<String, String>() {
@Override
public String call(String patientId) throws Exception {
return "json array as string"
}
});
//1. Read json string array into a Dataframe (execution 1)
DataFrame dataSchemaDF = sqlContext.read().json(jsonStringRDD );
//2. Save dataframe as parquet file (execution 2)
dataSchemaDF.write().parquet("md.parquet");
Run Code Online (Sandbox Code Playgroud)
但我观察到RDD上的mapper函数indexData正在执行两次.第一,当我读到jsonStringRdd的DataFrame使用SQLContext
其次,当我写 dataSchemaDF的拼花文件
你可以指导我这个,如何避免这种重复执行?还有其他更好的方法将JSON字符串转换为Dataframe吗?
是否值得在64位Java上迁移小型独立Java应用程序(最大:100-200MB堆).有什么特别的优点; 我的观察是,它只是增加了应用程序的内存占用.
请发表您的经验/意见.
为什么java Number/Numeric数据类型如(Integer/Long/...)不会抛出溢出异常?例如:我们在数学上得到了错误的答案
Integer val = Integer.MAX_VALUE * 2;
System.out.println("Max val unexpected" + val);
Run Code Online (Sandbox Code Playgroud)
**最大值意外-2**
我知道; 这些数据类型的核心使用原始java数据类型.仍然,通过抛出像.ValueOverflowException之类的东西来防止错误答案不是一个好主意.考虑扩展和添加此行为,但这些所有类都是最终的..
请发表您的想法和意见.
是否可以在JPA/hibernate中进行以下集合映射
@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")
private Deque<Child> childrens;
Run Code Online (Sandbox Code Playgroud)
它抛出错误
Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements
Run Code Online (Sandbox Code Playgroud)
我正在使用JPA 2.0和Hibernate 3
我打算将我们的一些文件处理组件从Perl移动到Java.这些Perl组件执行诸如的操作
等等
但我很担心,因为这在速度和记忆方面可能表现不佳.
我们是否有针对Java Vs Perl IO的任何基准/比较研究?
在Java中集成Perl模块是个好主意(使用Apache XMLrpc从java调用Perl模块,我还没有尝试过)
请分享您的想法/经验.
java ×9
spring ×2
apache-camel ×1
apache-karaf ×1
apache-spark ×1
class ×1
consumer ×1
dispatch ×1
hibernate ×1
instanceof ×1
jdbc ×1
jpa-2.0 ×1
osgi ×1
perl ×1
queue ×1
rdd ×1
sql ×1
wildcard ×1