小编Pio*_*ler的帖子

Java中是否存在零时间启动(无重新编译)可切换条件标志?

我正在寻找一种方式来提供最快的(我的意思是零时间 -编译/类加载/ JIT时间分辨)可以开/关标志if条件.当然,每次应用程序运行时,此条件只会更改一次 - 启动时.

我知道可以条件编译"条件编译时常量",并且可以从代码中删除整个条件.但是,无需重新编译源代码,最快(也可能是简单)的替代方案是什么?

我可以将条件移动到单独的.jar类和带条件的方法分开,在那里我生成两个版本.jar并在应用程序启动时在类路径中打开这些版本?将JIT删除调用方法在不同的.jar ,如果它发现,该方法是空的

我可以通过在类路径中实现"ClassWithMyCondition"提供两个类来实现,其中一个类将具有真正的实现,第二个将只有空方法并实例化其中一个Class.forName.newInstance()?将JIT从我的主要删除对空方法的调用非常循环嵌套的方法?

什么可以是最简单的字节码操作解决这个问题?

java debugging performance jit classloader

6
推荐指数
3
解决办法
243
查看次数

带有Tomcat的JSR-356 WebSockets - 如何限制单个IP地址内的连接?

我制作了一个JSR-356 @ServerEndpoint,其中我想限制来自单个IP地址的活动连接,以防止简单的DDOS攻击.

请注意,我正在搜索Java解决方案(JSR-356,Tomcat或Servlet 3.0规范).

我尝试过自定义端点配置程序,但即使在HandshakeRequest对象中也无法访问IP地址.

如何在没有iptables等外部软件的情况下限制单个IP地址的JSR-356连接数?

java tomcat servlets websocket jsr356

6
推荐指数
1
解决办法
9428
查看次数

将记录移动到另一个表与"标志"列SQL性能

假设我有一个代表"任务队列"的表(数千万条记录).

任务可以"排队"或"完成".

如果我们想抓住10个要处理的任务,哪个表现更好?

  • 带有"flag"列的单个表,如ENUM/ BITTINYINT标记任务已完成或未完成(最终列上的索引)
  • 为排队任务分离表,完成任务并从排队完成后排除每个已完成任务

请注意,在开始时,我们有一些或没有完成的任务,但随着处理的进行,将有数百万已经完成的任务.

sql database indexing performance schema

6
推荐指数
1
解决办法
938
查看次数

用于创建项的唯一随机连接的算法

我正在考虑一种算法,它将创建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)

language-agnostic random algorithm combinations unique

5
推荐指数
1
解决办法
357
查看次数

Java的轻量级长时间运行方法取消模式

是否有一个轻量级模式来取消长期运行方法,取而代之的是这样的代码:

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类,将步骤细分为任务对象,创建一个队列,然后在循环中逐步执行取消检查,但我只是想知道是否存在任何简单的代码结构模式.

java concurrency multithreading

5
推荐指数
1
解决办法
565
查看次数

具有"无法访问"错误的奇怪Java变量类型,但在可编译代码中

在编码时,我遇到了一种类型,在我的NetBeans IDE中既不像原语也不像对象.类型是来自Apache MINA的 IoBuffer(但可能确切的类型对此问题没有任何意义).

依我看来:

  • 我的项目编译得很好,尽管这种类型用于下面的很多地方
  • 我的NetBeans不识别这种类型("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

是什么造成了这种情况

java ide types static-libraries

5
推荐指数
1
解决办法
2113
查看次数

即使使用连接验证,Tomcat JDBC Conencton Pool + MySQL 也会出现“断管”问题

我正在努力配置 Tomcat JDBC 连接池以实现可靠性。当前的问题是,在测试环境中,我在 webapp 中有这样的 scanerio:

  • 第 1 天:一切正常
  • 第 2 天:webapp 无法与 MySQL 通信几个小时,日志中有很多“断管”
  • 第 3 天:令人惊讶的是,一切又恢复正常(无需输入或重新启动)

我已经配置了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)

java mysql tomcat connection-pooling jdbc

5
推荐指数
1
解决办法
4970
查看次数

如何以1分钟的小间隔使用Android AlarmManager?

我想制作一些外部服务监视器,并尽快通知问题.

我尝试设置AlarmManager间隔1-2分钟,但看起来它每隔几分钟随机发射一次.

当然,我想安全地通过android杀死我的后台任务,如果我只是使用它会停止监视Service.

是否可以AlarmManager小而准确的间隔使用?

在Facebook,Gmail等应用程序中使用哪些方法来通知新消息?

ServicestartForeground和偏用更好WakeLock吗?

android timer background-service alarmmanager

5
推荐指数
1
解决办法
1万
查看次数

JDK ClassLoader.getResourceAsStream坏了吗?(未公开的资源)

我将尝试证明这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来源: …

java resources classloader resource-leak java-8

5
推荐指数
1
解决办法
1653
查看次数

如何在 JDK 中找到依赖于平台的陷阱的完整列表,如时区、编码、行尾等?

我们总是希望我们的开发/测试环境像生产环境一样,但通常我们可能会陷入使用 JDK 函数的陷阱,这些 JDK 函数没有非常明确地公开环境依赖项(如必需的方法参数),或者可能很难检测和意识到。例如:

  • public String(byte bytes[]) 使用默认编码
  • new Date()/Instant.now() 使用系统时区
  • System.out.printf("%n") 使用平台线结尾

其中一些可以由 JVM 参数驱动,例如-Dfile.encoding=UTF-8.

但是如何找到所有这些陷阱呢?

java platform jvm cross-platform

5
推荐指数
1
解决办法
107
查看次数