我正在寻找一种方式来提供最快的(我的意思是零时间 -编译/类加载/ JIT时间分辨)可以开/关标志的if条件.当然,每次应用程序运行时,此条件只会更改一次 - 启动时.
我知道可以条件编译"条件编译时常量",并且可以从代码中删除整个条件.但是,无需重新编译源代码,最快(也可能是简单)的替代方案是什么?
我可以将条件移动到单独的.jar类和带条件的方法分开,在那里我生成两个版本.jar并在应用程序启动时在类路径中打开这些版本?将JIT删除调用方法在不同的.jar ,如果它发现,该方法是空的?
我可以通过在类路径中实现"ClassWithMyCondition"提供两个类来实现,其中一个类将具有真正的实现,第二个将只有空方法并实例化其中一个Class.forName和.newInstance()?将JIT从我的主要删除对空方法的调用非常循环嵌套的方法?
什么可以是最简单的字节码操作解决这个问题?
我制作了一个JSR-356 @ServerEndpoint,其中我想限制来自单个IP地址的活动连接,以防止简单的DDOS攻击.
请注意,我正在搜索Java解决方案(JSR-356,Tomcat或Servlet 3.0规范).
我尝试过自定义端点配置程序,但即使在HandshakeRequest对象中也无法访问IP地址.
如何在没有iptables等外部软件的情况下限制单个IP地址的JSR-356连接数?
假设我有一个代表"任务队列"的表(数千万条记录).
任务可以"排队"或"完成".
如果我们想抓住10个要处理的任务,哪个表现更好?
ENUM/ BIT或TINYINT标记任务已完成或未完成(最终列上的索引)请注意,在开始时,我们有一些或没有完成的任务,但随着处理的进行,将有数百万已经完成的任务.
我正在考虑一种算法,它将创建X个最独特的Y部分连接,其中每个部分可以是几个项目之一.例如3部分:
part #1: 0,1,2 part #2: a,b,c part #3: x,y,z
并且(随机的,一种可能性的一种情况)结果是5个连接:
0ax 1by 2cz 0bz (note that '0by' would be "less unique " than '0bz' because 'by' already was) 2ay (note that 'a' didn't after '2' jet, and 'y' didn't after 'a' jet)
下一次连接的简单BAD结果:
1cy ('c' wasn't after 1, 'y' wasn't after 'c', BUT '1'-'y' already was as first-last
Run Code Online (Sandbox Code Playgroud)
简单GOOD下一个结果将是:
0cy ('c' wasn't after '0', 'y' wasn't after 'c', and '0'-'y' wasn't as first-last part)
1az
1cx
Run Code Online (Sandbox Code Playgroud)
我知道这个解决方案限制了可能的结果,但是当所有完全独特的可能性消失时,算法应该继续并尝试保持最可靠的唯一性(尽可能少地重复).
考虑真实的例子:
Boy/Girl/Martin …Run Code Online (Sandbox Code Playgroud) 是否有一个轻量级模式来取消长期运行方法,取而代之的是这样的代码:
public void longComputations() {
... first step...
if ( cancelled ) {
rollbackWork();
return;
}
... second step...
if ( cancelled ) {
rollbackWork();
return;
}
... third step...
if ( cancelled ) {
rollbackWork();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个Task类,将步骤细分为任务对象,创建一个队列,然后在循环中逐步执行取消检查,但我只是想知道是否存在任何简单的代码结构模式.
在编码时,我遇到了一种类型,在我的NetBeans IDE中既不像原语也不像对象.类型是来自Apache MINA的 IoBuffer(但可能确切的类型对此问题没有任何意义).
依我看来:
"cannot find symbol"我写的时提示IoBuffer)IoBuffer变量/ instance(compile error: "cannot find symbol")toString.当然,这是一个标准的Java类,但从当前的角度来看它看起来很不寻常(与Red5 Media Server捆绑在一起的一个示例的Maven项目)
简单的调用:
// videoData.getData() returns IoBuffer
videoData.getData().toString()
Run Code Online (Sandbox Code Playgroud)
导致提示和编译时错误:
org/red5/demos/oflaDemo/StreamMultiplexer.java:[89,30] error: cannot access IoBuffer
如果我只写,同样的错误videoData.getData()- 在这种情况下的提示是The type od getData() is erroneous
是什么造成了这种情况
我正在努力配置 Tomcat JDBC 连接池以实现可靠性。当前的问题是,在测试环境中,我在 webapp 中有这样的 scanerio:
我已经配置了validationInterval, validationQuery, validationTimeout. 这是我的数据源配置:
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username" value="${dbUser}" />
<property name="password" value="${dbPass}" />
<property name="url" value="${dbUrl}" />
<property name="defaultAutoCommit" value="false" />
<property name="defaultTransactionIsolation">
<util:constant static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE" />
</property>
<property name="maxActive" value="300" />
<property name="maxIdle" value="25" />
<property name="initialSize" value="5" />
<property name="validationInterval" value="5000" />
<property name="validationQuery" value="SELECT 1"/>
<property name="validationQueryTimeout" value="3" …Run Code Online (Sandbox Code Playgroud) 我想制作一些外部服务监视器,并尽快通知问题.
我尝试设置AlarmManager间隔1-2分钟,但看起来它每隔几分钟随机发射一次.
当然,我想安全地通过android杀死我的后台任务,如果我只是使用它会停止监视Service.
是否可以AlarmManager小而准确的间隔使用?
在Facebook,Gmail等应用程序中使用哪些方法来通知新消息?
Service用startForeground和偏用更好WakeLock吗?
我将尝试证明这ClassLoader.getResourceAsStream()是打开两个InputStreams,不关闭它,只返回一个客户端.我的逻辑是否正确?JDK源是从jdk1.8.0_25中选取的
我在间隔(原始问题)中使用Spring ClassPathResource进入未封闭的资源问题,即ClassLoader.getResourceAsStream用于获取InputStream属性文件.
经过调查,我发现classLoader.getResourceAsStream越来越的URL通过URL url = getResource(name);,然后将其打开该流,但URL url = getResource(name)已经打开该流.JDK来源ClassLoader:
public InputStream getResourceAsStream(String name) {
URL url = getResource(name); /* SILENTLY OPENS AND DON'T CLOSES STREAM */
try {
return url != null ? url.openStream() : null; /* SECOND OPEN !!! */
} catch (IOException e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们将close()在InputStream提供这种方式,我们将关闭只有流中打开url.openStream().JDK来源: …
我们总是希望我们的开发/测试环境像生产环境一样,但通常我们可能会陷入使用 JDK 函数的陷阱,这些 JDK 函数没有非常明确地公开环境依赖项(如必需的方法参数),或者可能很难检测和意识到。例如:
public String(byte bytes[]) 使用默认编码new Date()/Instant.now() 使用系统时区System.out.printf("%n") 使用平台线结尾其中一些可以由 JVM 参数驱动,例如-Dfile.encoding=UTF-8.
但是如何找到所有这些陷阱呢?
java ×7
classloader ×2
performance ×2
tomcat ×2
alarmmanager ×1
algorithm ×1
android ×1
combinations ×1
concurrency ×1
database ×1
debugging ×1
ide ×1
indexing ×1
java-8 ×1
jdbc ×1
jit ×1
jsr356 ×1
jvm ×1
mysql ×1
platform ×1
random ×1
resources ×1
schema ×1
servlets ×1
sql ×1
timer ×1
types ×1
unique ×1
websocket ×1