在考虑用于分布式/并发/故障转移/可扩展后端环境的Java替代方案时,我发现了Erlang.我花了一些时间在书籍和文章上,其中几乎所有人(甚至是Java上瘾的人)都说Erlang在这样的环境中是更好的选择,因为许多有用的东西都是以不易出错的方式开箱即用的.
我确信Erlang在大多数情况下更快,主要是因为不同的垃圾收集策略(每个进程),缺少共享状态(黑白线程和进程)和更紧凑的数据类型.但是当我发现Erlang与Java数学样本的比较时,我感到非常惊讶,其中Erlang的速度慢了几个,例如从x10到x100.
即使是并发任务,也可以在几个核心和一个核心上完成.
这是什么原因?想到这些答案:
如果那是因为这些是非常具体的数学算法,那么任何人都可以展示更多真实/实践性能测试吗?
更新:到目前为止,我已经得到了答案,总结了Erlang不是这种特定"快速Java案例"的正确工具,但我不清楚这一点 - 这里Erlang效率低下的主要原因是什么:动态类型,GC还是可怜的原生编译?
我正在尝试在非最终字段的对象初始化不足的情况下重现内存可见性问题(JLS 17.5 Final Field Semantics,FinalFieldExample类示例).它声明"但是,fy不是最终的;因此,reader()方法不能保证看到它的值4"
我试过这段代码:
public class ReorderingTest2 {
public static void main(String[] args) {
for (int i = 0; i < 2500; i++) {
new Thread(new Reader(i)).start();
new Thread(new Writer(i)).start();
}
}
static class Reader implements Runnable {
private String name;
Reader(int i) {
this.name = "reader" + i;
}
@Override
public void run() {
//System.out.println(name + " started");
while (true) {
FinalFieldExample.reader(name);
}
}
}
static class Writer implements Runnable {
private String name; …Run Code Online (Sandbox Code Playgroud) java multithreading constructor processor-architecture memory-visibility
我需要在Netty客户端配置socks代理(通过socks4或5个代理请求不同的站点).从免费袜子列表(如www.socks-proxy.net,http://sockslist.net/ 等)尝试了很多代理,但没有运气:
@Test
public void testProxy() throws Exception {
final String ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
final String host = "www.main.de";
final int port = 80;
Bootstrap b = new Bootstrap();
b.group(new NioEventLoopGroup())
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast(new HttpClientCodec());
p.addLast(new HttpContentDecompressor());
p.addLast(new HttpObjectAggregator(10_485_760));
p.addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelActive(final ChannelHandlerContext ctx) throws Exception {
HttpRequest request = new …Run Code Online (Sandbox Code Playgroud) 我有一些基于netty(4.1b7)的网络爬虫,我大量请求http和https不同的网站,我正在尝试配置netty客户端来处理具有不同身份验证设置的https网站.
当我有一个简单的netty配置没有自己的证书:
SslContext sslCtx = SslContextBuilder.forClient().build();
SSLEngine sslEngine = sslCtx.newEngine(ch.alloc(), host, port);
p.addLast("ssl", new SslHandler(sslEngine));
Run Code Online (Sandbox Code Playgroud)
大约一半的https网站被请求好,但其他网站失败了:
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:304)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker$1.run(Handshaker.java:919)
at sun.security.ssl.Handshaker$1.run(Handshaker.java:916)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369)
at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1164)
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1067)
... 19 moreCaused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:281)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) …Run Code Online (Sandbox Code Playgroud) 我们有一个普通的独立spring应用程序,我们需要将jdbc数据源放在jndi中.(我们使用jboss treecache,它需要数据源在jndi中).
一些谷歌搜索发现大多数使用spring的jndi-lookup示例,其中一个对象已经放入jndi(通过tomcat或应用程序服务器等),但我们还需要:我有一个普通的数据源Spring bean,我注入其他服务,但我无法将其注入TreeCache,因为它只需要来自jndi.
找到org.springframework.jndi.JndiTemplate,可以声明为bean,例如:
<bean id="fsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
<prop key="java.naming.provider.url">file:///c:\windows\temp</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
但是没有找到如何在java代码中绑定它:fsJndiTemplate.bind(name, obj)来自其他bean的init-method.有没有办法以声明方式做到这一点?
我想知道如果你需要在一台机器上的jvm中尽可能快地安排大量(非阻塞)任务,那么使用什么定时器实现.
我已经研究ScheduledThreadPoolExecutor和HashedWheelTimer来源(+轮定时器通用文档),这里是基本的差异(N -的所有悬而未决的计划任务数到目前为止,C -车轮大小):
的ScheduledThreadPoolExecutor
HashedWheelTimer
因此,我倾向于将硬件计时器用于这种用例,因为您必须以最小的开销快速安排任务,即O(1)用于新任务.此外,您将最大限度地减少簿记活动,因为您将获得更少的刻度(N <C)和更少的锁争用.在这种情况下,取消不是非常重要的特征
是否有人尝试过这些计时器进行类似的活动以及实际看到的结果?谢谢!
有向图G =(V,E)中的母顶点是顶点v,使得所有其他顶点G可以通过来自v的有向路径到达给出O(n + m)算法以测试图G是否包含母亲顶点.
(c)来自Skiena手册
只找到O(n(n + m))方式
假设我们给出给定图G的最小生成树T(具有n个顶点和m个边)以及我们将添加到G的权重w的新边e =(u,v).给出一个有效的算法来找到图G + e的最小生成树.您的算法应在O(n)时间运行以获得完全信用.
(c)来自Skiena手册
从u或v开始Prim或Kruskal alg,直到我们到达给定生成树路径的片段?似乎新生成树不会从一个新边缘发生很大变化.
根据JCP(16.2.2.安全出版物):
这种情况发生之前 - 保证实际上是一种比安全出版物更强的可见性和排序承诺.当X安全地从A发布到B时,安全发布保证了X的状态的可见性,但不保证A可能触及的其他变量的状态.但是如果A在队列中放置X,那么在B从该队列中取出X之前,不仅B在A离开它的状态下看到X(假设X后来没有被A或其他任何人修改过),但B看到A在切换之前所做的一切(再次,同样需要注意)
我想知道什么时候安全发布可以没有发生 - 也就是说没有使用volatile/atomics或同步(或通过使用任何内部列出的AQS之类的框架)?
一种情况是不可变对象中的最终字段,您可以将其发布为没有任何其他步骤.
还有其他案件吗?
UPD:重新阅读3.5.3.安全发布惯用语,另一种情况 - "从静态初始化程序初始化对象引用".现在看来这些都是选择.
在编写一些java文章时,我试图在多线程环境中的非同步对象构造的情况下重现重新排序.构建重型对象时没有同步/挥发性/韵母和其他线程在构造函数调用后立即访问它的情况.这是我尝试的代码:
public class ReorderingTest {
static SomeObject<JPanel>[] sharedArray = new SomeObject[100];
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
String name = "watcher" + i;
new Thread(new Watcher(name)).start();
System.out.printf("watcher %s started!%n", name);
}
}
static class Watcher implements Runnable {
private String name;
Watcher(String name) {
this.name = name;
}
public void run() {
while (true) {
int randomIndex = (int) (Math.random() * sharedArray.length);
SomeObject<JPanel> item = sharedArray[randomIndex];
if (item …Run Code Online (Sandbox Code Playgroud) 我们在prod上有impala服务器,我需要使用impala shell连接到我的本地macbook w/mac os x(10.8).
我下载Impala-cdh5.1.0-release.tar.gz,取消归档,尝试buildall.sh失败:.../bin/impala-config.sh: line 123: nproc: command not found
impala-shell直接尝试也失败了:
$ shell/impala-shell
ls: /Users/.../Impala-cdh5.1.0-release/shell/ext-py/*.egg: No such file or directory
Traceback (most recent call last):
File "/Users/.../Impala-cdh5.1.0-release/shell/impala_shell.py", line 20, in <module>
import prettytable
ImportError: No module named prettytable
Run Code Online (Sandbox Code Playgroud)
我安装了jdk并设置了JAVA_HOME.Cloudera经理似乎不支持mac os,不是吗?
我正在寻找一种从Java以编程方式将mp4文件转换为mp3文件的最小方法.理想情况下,我还需要切割目标文件.
Java库是支持这个还是仅支持第三方?像jmf,ffmpeg?
谢谢!
我有一个带有多个包的osgi应用程序(在felix中).一个包中有一些常见的属性文件,其余的包只需要使用它们.
我们使用maven和spring osgi,属性文件在resouces中:
<path to bundle>/src/main/resources/
common.properties
engine.properties
...
Run Code Online (Sandbox Code Playgroud)
Maven通常在bundle jar中构建它们,因此它们应该在应用程序类路径中,但Spring无法访问它们,这会失败:
<context:property-placeholder location="classpath:common.properties" />
Run Code Online (Sandbox Code Playgroud)
(试过classpath*:和其他组合)
它是否真的是osgi意识形态的全球问题,没有标准的方法让它运作?只有黑客和解决方法就像是和<osgix:cmProperties...>?
它关注的是因为它使部署更加困难且容易出错:您无法mvn deploy像在普通应用程序中那样在jars中部署属性文件, - 您必须手动将它们复制到每个版本的生产框中.
java ×10
netty ×3
algorithm ×2
concurrency ×2
graph-theory ×2
spring ×2
classpath ×1
client ×1
cloudera ×1
compare ×1
constructor ×1
erlang ×1
ffmpeg ×1
file-io ×1
http-proxy ×1
httpclient ×1
impala ×1
jndi ×1
macos ×1
mp3 ×1
mp4 ×1
osgi ×1
performance ×1
shell ×1
socks ×1
ssl ×1
timer ×1
visibility ×1