我想知道是否有任何额外的优化我可以实现以提高Java中反射调用的速度.并不是说性能是令人望而却步的,但是我在考虑库中的某些代码时得到了一些我正在编写的代码在某个地方以紧密的方式实现.
考虑一种反射性调用的实用方法:
public static Object invoke(Object targetObject, String methodName, Object[] arguments, Class<?>[] signature)
Run Code Online (Sandbox Code Playgroud)
基本操作是
return method.invoke(targetObject, arguments);
Run Code Online (Sandbox Code Playgroud)
作为性能优化,我使用目标对象的类,方法名称和签名(其代码可能使用某些改进)的哈希来缓存方法,但除此之外,还有什么我可以做的吗?我听说过InvokeDynamic的一些早期实现的参考听起来很有希望,但我只是假设它们可能还不适用,并且我打算使用自己的字节代码操作,因为我希望保持实用程序简单(但速度快).
干杯.
我发现当我需要重命名Java类(因此需要更改源文件)或需要更改包名(因此移动源文件[s])时,我可以:
任何人都可以建议一个更好的程序吗?
在进行交互式bash会话时,我想念的Windows shell中的一个方面是F8您开始键入命令的键,命中F8并且shell找到在历史记录中输入的最新命令,该命令与您到目前为止键入的命令相匹配.例如
me@Ubntu07:~>cd /home/jb<F8 Key Here>
Run Code Online (Sandbox Code Playgroud)
提出我之前的命令:
me@Ubntu07:~>cd /home/jboss/server/default/log
Run Code Online (Sandbox Code Playgroud)
有没有办法在bash中这样做?
我一直在关注OpenLaszlo并观察到客户端中的脚本是用JavaScript实现的.这是否意味着可以使用像JQuery和PrototypeJS这样的库?
我正在查看Oracle的DBCN API(连续查询通知),并使用它实现一个事件流,指示数据库中的新行和/或修改行.
我关心的是:如果我配置并启动更改侦听器,然后我的Java客户端失败,服务器端仍在累积更改以进行传递.但是,当我的Java客户端恢复时,我的选项似乎有限:
那么如何恢复现有注册的会话?或者,我可以从哪里找到并检索积压的通知?
谢谢.
//尼古拉斯
我正在评估 Java 中高效数据存储的选项。该数据集是带有命名主键的带时间戳的数据值。例如
Name: A|B|C:D
Value: 124
TimeStamp: 01/06/2009 08:24:39,223
Run Code Online (Sandbox Code Playgroud)
可能是给定时间点的股票价格,所以我认为这是一个经典的时间序列数据模式。然而,我确实需要一个通用的 RDBMS 解决方案,它可以与任何合理的 JDBC 兼容数据库一起使用,因为我想使用 Hibernate。因此,像 Oracle 这样的数据库的时间序列扩展并不是真正的选择,因为我希望实现者能够使用他们自己的支持 JDBC/Hibernate 的数据库。
这里的挑战就是短时间内积累的大量数据。到目前为止,我的实现主要围绕定义定期汇总和清除计划,其中原始数据被聚合到“日”、“周”、“月”等表中,但缺点是粒度的早期损失以及存储在不同数据中的周期之间的周期不匹配带来的轻微不便。聚合体。
这一挑战的选择有限,因为在保留数据原始粒度的同时可以物理压缩多少数据存在绝对限制,并且使用关系数据库和支持通用 JDBC 的指令加剧了这一限制。 。
借用经典数据压缩算法中的概念概念,并利用同一命名键的许多连续值可以相同的事实,我想知道是否有方法可以通过将重复值合并为无缝地减少存储记录的数量一个逻辑行,同时还存储一个计数器,该计数器有效地指示“接下来的n 条记录具有相同的值”。这个实现看起来很简单,但代价是,使用标准 SQL 进行查询时,数据模型现在异常复杂,尤其是在使用任何类型的聚合 SQL 函数时。这显着降低了数据存储的实用性,因为只有复杂的自定义代码才能将数据恢复到“解压缩”状态,从而导致数百种工具的阻抗不匹配,而这些工具将无法正确呈现此数据。
我考虑了定义自定义 Hibernate 类型的可能性,这些类型基本上“理解”压缩数据集并将其备份并使用动态创建的合成行返回查询结果。(除了严格控制的输入流之外,数据库将对所有客户端只读)。除了原始 JDBC 之外,我想到的几个工具还将与 Hibernate/POJOS 集成(例如 JasperReports),但这并不能真正解决聚合函数问题,并且可能还有许多其他问题。
因此,我正在部分地接受自己可能必须使用更专有的[可能非 SQL] 数据存储(任何建议都表示赞赏),然后专注于编写伪 JDBC 驱动程序的可能不太复杂的任务,以至少简化与外部工具。
我听说过一种称为“位打包文件”的东西作为实现这种数据压缩的机制,但我不知道有任何数据库可以提供此功能以及我想做的最后一件事(或者可以做,真的...... )是写我自己的数据库。
有什么建议或见解吗?
我在我的Spring XML描述符中使用原型范围的bean定义来配置默认属性(这些bean有许多属性)然后我用a getBean(beanName, ctorArgs[])来调用应用程序上下文来创建实例.
bean定义需要2-3个构造函数参数,这些参数提供逻辑上唯一的键,用于JMX的键属性ObjectName等.另外,构造函数参数写入的变量是final.
我所看到的是,当应用程序上下文刷新时,它会尝试实例化这些原型,这看起来与你想要原型的完全相反.它们是模板,而不是实际的实例.为了解决这个问题,我一直在使用伪造的ctor值配置原型,以便实例化这些伪造的bean实例,我只是在代码中过滤掉创建的MBean.
我的问题是,如何配置应用程序上下文来注册这些原型bean定义,但是在我打电话之前不实例化它们getBean?
默认情况下,Redis配置有16个数据库,编号为0-15.这只是名称间距的一种形式,还是存在按数据库隔离的性能影响?
例如,如果我使用默认数据库(0),并且我有1000万个密钥,最佳实践建议使用keys命令通过通配符模式查找密钥将是低效的.但是如果我存储我的主要密钥,也许是8个分段密钥的前4个分段,导致在单独的数据库(比如数据库3)中产生更小的密钥子集.Redis会将这些视为一组较小的密钥,还是所有数据库中的所有密钥都显示为一个巨大的密钥索引?
更明确地说,就时间复杂性而言,如果我的数据库看起来像这样:
密钥调用数据库3 的时间复杂度是O(10m)还是O(10k)?
谢谢你的时间.
我一直使用VNC这样做,这很容易,但我很好奇XDMCP之类的一些东西.据我了解,这是一种在远程X-Server上创建整个桌面的方法,看起来相当优雅.
几年前,我在Solaris服务器上工作,多个开发人员在Windows中运行X-Servers,我们能够访问完整的远程X桌面.到目前为止,我在基于X的系统中所做的所有努力似乎都表明只能加载桌面的一个远程或本地实例,所以我猜这个Solaris的东西是一个"模拟"桌面的实际应用程序,但谁知道.. ..
有什么输入?
使用kafka-streams 0.10.0.0,转发消息时,我会定期在StreamTask中看到空指针异常。它在调用的10%到50%之间变化。NPE发生在这种方法中:
public <K, V> void forward(K key, V value) {
ProcessorNode thisNode = currNode;
try {
for (ProcessorNode childNode : (List<ProcessorNode<K, V>>) thisNode.children()) {
currNode = childNode;
childNode.process(key, value);
}
} finally {
currNode = thisNode;
}
}
Run Code Online (Sandbox Code Playgroud)
似乎在某些情况下,thisNode字段为null。知道是什么原因造成的吗?堆栈跟踪如下。
[ERROR] 2016-08-21 14:50:39.288 [StreamThread-1] StreamedMetricMeter - Forwarding failed
java.lang.NullPointerException
at org.apache.kafka.streams.processor.internals.StreamTask.forward(StreamTask.java:336) ~[kafka-streams-0.10.0.0.jar:?]
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:187) ~[kafka-streams-0.10.0.0.jar:?]
at com.heliosapm.streams.metrics.processors.AbstractStreamedMetricProcessor.forward(AbstractStreamedMetricProcessor.java:552) [classes/:?]
at com.heliosapm.streams.metrics.processors.impl.StreamedMetricMeter.doProcess(StreamedMetricMeter.java:89) [classes/:?]
at com.heliosapm.streams.metrics.processors.impl.StreamedMetricMeter.doProcess(StreamedMetricMeter.java:1) [classes/:?]
at com.heliosapm.streams.metrics.processors.AbstractStreamedMetricProcessor.process(AbstractStreamedMetricProcessor.java:166) [classes/:?]
at org.apache.kafka.streams.processor.internals.ProcessorNode.process(ProcessorNode.java:68) [kafka-streams-0.10.0.0.jar:?]
at org.apache.kafka.streams.processor.internals.StreamTask.forward(StreamTask.java:338) [kafka-streams-0.10.0.0.jar:?]
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:187) [kafka-streams-0.10.0.0.jar:?]
at org.apache.kafka.streams.processor.internals.SourceNode.process(SourceNode.java:64) …Run Code Online (Sandbox Code Playgroud) java ×2
jdbc ×2
linux ×2
apache-kafka ×1
bash ×1
compression ×1
database ×1
desktop ×1
eclipse ×1
hibernate ×1
javascript ×1
jquery ×1
key ×1
openlaszlo ×1
oracle ×1
performance ×1
prototypejs ×1
redis ×1
refactoring ×1
reflection ×1
spring ×1
subclipse ×1
svn ×1
unix ×1
x11 ×1