小编Bob*_*Gee的帖子

如何判断我是在64位JVM还是32位JVM(从程序中运行)?

如何判断我的应用程序运行的JVM是32位还是64位?具体来说,我可以访问什么功能或偏好来在程序中检测到这个?

java 64-bit java-native-interface jvm 32-bit

552
推荐指数
8
解决办法
63万
查看次数

如何在bash中获取文件的绝对目录?

我编写了一个bash脚本,它将输入文件作为参数并读取它.
此文件包含一些路径(相对于其位置)与使用的其他文件.

我希望脚本转到包含输入文件的文件夹,以执行更多命令.

那么,如何从输入文件中获取文件夹(以及文件夹)?(在linux中.)

linux bash shell

70
推荐指数
4
解决办法
10万
查看次数

ClearCase的优点/缺点

因为我目前正在努力学习IBM Rational ClearCase,所以我想听听你的专业意见.

与其他版本控制系统(如Subversion或Git)相比,我对优缺点特别感兴趣.

version-control clearcase

68
推荐指数
17
解决办法
7万
查看次数

如何编写Java以允许SSE使用和边界检查消除(或其他高级优化)?

情况:

我正在优化LZF压缩算法的纯java实现,它涉及大量的byte []访问和基本的int数学,用于散列和比较.性能确实很重要,因为压缩的目标是降低I/O要求.我没有发布代码,因为它尚未清理,并且可能会进行大量重组.

问题:

  • 如何编写我的代码以允许它使用更快的SSE操作进行JIT编译到表单?
  • 我如何构造它,以便编译器可以轻松地消除数组边界检查?
  • 是否有关于特定数学运算的相对速度的广泛参考(等于正常加/减需要多少递增/递减,移位或对阵列访问的速度有多快)?
  • 我如何才能优化分支 - 最好是使用短体,或者一些长的条件语句,或者是嵌套条件的短条件语句?
  • 使用当前的1.6 JVM,在System.arraycopy击败复制循环之前必须复制多少个元素?

我已经做了什么:

在我因为过早优化而受到攻击之前:基本算法已经非常出色,但Java实现的速度不到等效C的2/3.我已经用System.arraycopy替换了复制循环,致力于优化循环并消除了un - 需要的操作.

我大量使用bit twiddling并将字节打包为整数,以实现性能,以及移位和屏蔽.

出于法律原因,我无法查看类似库中的实现,并且现有库具有过于严格的许可条款.

GOOD(已接受)答案的要求:

  • 不可接受的答案: "这个更快",没有解释为什么多少,为什么,或者没有用JIT编译器测试过.
  • 边界答案:在Hotspot 1.4之前没有经过任何测试
  • 基本答案:将提供一般规则和解释为什么它在编译器级别更快,大致更快
  • 好的答案:包括几个代码示例来演示
  • 优秀答案:拥有JRE 1.5和1.6的基准测试
  • 完美的答案:是由参与HotSpot编译器的人员完成的,可以完全解释或参考使用优化的条件,以及通常更快的速度.可能包含由HotSpot生成的java代码和示例汇编代码.

另外:如果有人有详细说明Hotspot优化和分支性能的内容的链接,那么欢迎这些.我对字节码有足够的了解,网站分析字节码而不是源代码级别的性能会有所帮助.

(编辑)局部答案:界限 - 检查消除:

这是从提供的HotSpot内部维基链接获取的:https://wikis.oracle.com/display/HotSpotInternals/RangeCheckElimination

HotSpot将消除所有for循环中的边界检查,具有以下条件:

  • 数组是循环不变的(不在循环中重新分配)
  • 索引变量有一个恒定的步幅(增量/减少恒定量,如果可能的话只在一个点)
  • 数组由变量的线性函数索引.

例: int val = array[index*2 + 5]

要么: int val = array[index+9]

不: int val = array[Math.min(var,index)+7]


早期版本的代码:

这是一个示例版本.不要窃取它,因为它是H2数据库项目的未发布版本的代码.最终版本将是开源的.这是对代码的优化:H2 CompressLZF代码

从逻辑上讲,这与开发版本相同,但是它使用for(...)循环来逐步执行输入,并使用if/else循环来实现文字和反向引用模式之间的不同逻辑.它减少了阵列访问和模式之间的检查.

public int compressNewer(final byte[] in, final int inLen, final byte[] out, int …
Run Code Online (Sandbox Code Playgroud)

java optimization performance jvm-hotspot bounds-check-elimination

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

在什么时候值得重用Java中的数组?

在值得重用之前,缓冲区需要有多大的缓冲区?

或者,换一种方式:我可以重复分配,使用和丢弃byte []对象或运行池来保存和重用它们.我可能会分配很多经常被丢弃的小缓冲区,或者一些不会被丢弃的大缓冲区.汇集它们的大小比重新分配要便宜,小分配与大分配相比如何?

编辑:

好的,具体参数.说英特尔酷睿2双核CPU,最新的虚拟机版本,适用于操作系统.这个问题并不像听起来那么模糊......一些小代码和一个图表可以回答它.

EDIT2:

你发布了很多很好的一般规则和讨论,但这个问题确实要求数字.发布'em(和代码)! 理论很棒,但证据就是数字.如果各个系统的结果有所不同并不重要,我只是在寻找一个粗略的估计(数量级).似乎没有人知道性能差异是1.1,2,10或100+的因素,这是重要的.对于使用大型阵列的任何Java代码来说都很重要 - 网络,生物信息学等.

建议获得良好的基准:

  1. 在基准测试中运行之前预热代码.应该至少调用1000次10000次方法以获得完整的JIT优化.
  2. 确保基准测试方法运行至少1 10秒,并尽可能使用System.nanotime,以获得准确的计时.
  3. 在仅运行最少应用程序的系统上运行基准测试
  4. 运行基准测试3-5次并报告所有时间,因此我们看到它是多么一致.

我知道这是一个模糊且有点苛刻的问题.我会定期查看这个问题,答案会得到评论并持续评分.懒惰的答案不会(见下面的标准).如果我没有任何彻底的答案,我会附上一笔赏金.无论如何,我可能会额外奖励一个非常好的答案.

我所知道的(不需要重复):

  • Java内存分配和GC速度快,速度越来越快.
  • 对象池曾经是一个很好的优化,但现在它在大多数时候都会损害性能.
  • 对象池"通常不是一个好主意,除非创建对象很昂贵".Yadda yadda.

我不知道的是:

  • 我期望在标准的现代CPU上运行(MB/s)内存分配的速度有多快?
  • 分配大小如何影响分配率?
  • 分配数量/大小与池中重用的收支平衡点是什么?

路由到ACCEPTED答案(越多越好):

  • 最近的白皮书显示了现代CPU上的分配和GC数据(最近一年左右,JVM 1.6或更高版本)
  • 我可以运行一个简洁而正确的微基准的代码
  • 解释分配如何以及为何影响性能
  • 真实世界的例子/轶事来自于测试这种优化

上下文:

我正在开发一个库,为Java添加LZF压缩支持.该库通过添加额外的压缩级别(更多压缩)以及与来自C LZF库的字节流的兼容性来扩展H2 DBMS LZF类.我正在考虑的一件事是,是否值得尝试重用用于压缩/解压缩流的固定大小的缓冲区.缓冲器可以是~8kB,或~32kB,并且在原始版本中它们是~128kB.可以为每个流分配缓冲器一次或多次.我正在试图找出我想如何处理缓冲区以获得最佳性能,并着眼于将来可能的多线程.

是的,如果有人有兴趣使用它,库将作为开源发布.

java optimization performance memory-management

31
推荐指数
2
解决办法
7256
查看次数

为什么这个非常简单的SQL查询在MS Access中失败?

我有一个问题,所有的权利都不应该失败,我不能为我的生活找出原因

INSERT INTO Grocery_Store_Prices(Store,Item,Brand,Price,Unit,Quantity,Note) 
VALUES("Kroger","Cheesy Poof","Cartman",0.51,"fart",15,"what is going on");
Run Code Online (Sandbox Code Playgroud)

当我尝试运行查询时,我收到"INSERT INTO语句中的语法错误",并突出显示"注释"字段.如果我省略Note字段及其值,查询工作正常.有什么东西真的很明显我不见了,还是有一个Jet SQL怪癖埋在这里?

它所采用的表是:Grocery_Store_Prices

  • ID - 自动编号主键
  • 商店 - 文字
  • 日期 - 日期/时间
  • 项目 - 文字
  • 品牌 - 文字
  • 价格 - 货币
  • 单位 - 文字
  • 数量 - 数量(双)
  • 注 - 文字.

sql ms-access jet jet-sql

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

如何登录网站?

我想通过java程序登录ORKUT.我正在使用以下程序来完成它.我从一些网站上复制了它.现在我想将它用于ORKUT.但我对某些问题有一些疑问.

Q1.在哪里提供登录页面的URL(我想在新的HTTPGET(".....")中)?我是对还是不对?

Q2.传递给HTTPPost("")的构造函数的参数.如果我们必须在登录网页的html源代码中传递"form"元素的"action"属性的值,那么请确认它.

Q3.ORKUT登录页面的"form"元素具有该属性

onsubmit="return(gaia_onLoginSubmit());"
Run Code Online (Sandbox Code Playgroud)

由于存在上述属性,我是否需要对以下代码进行任何更改?

Q4.如何在登录后获取html网页源代码?

import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;


public class ClientFormLogin {

public static void main(String[] args) throws Exception {

    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httpget = new HttpGet("https://www.google.com/accounts/ServiceLogin?service=orkut&hl=en-US&rm=false&continue=http%3A%2F%2Fwww.orkut.com%2FRedirLogin%3Fmsg%3D0%26page%3Dhttp%253A%252F%252Fwww.orkut.co.in%252FHome.aspx&cd=IN&passive=true&skipvpage=true&sendvemail=false");

    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();

    System.out.println("Login form get: " + response.getStatusLine());
    if (entity != null) {
        entity.consumeContent();
    }
    System.out.println("Initial set …
Run Code Online (Sandbox Code Playgroud)

java authentication login httpclient

2
推荐指数
1
解决办法
1786
查看次数

为什么这个perl正则表达式没有正确执行DOTALL?

我正在从命令行使用perl regex操作来修改文件(在linux中),并想知道为什么它无法修改文件.这是正则表达式:

perl -i -pe 'undef $/; s#(<web-app[^>]*>).*?(</web-app>)#\1CHEESE\n\2#gsi' filePath/web.xml
Run Code Online (Sandbox Code Playgroud)

现在,这应该正确匹配多行块.但事实并非如此.样本输入:

<web-app xmlns= "http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
<stuff goes here and tags and things>
</web-app>
Run Code Online (Sandbox Code Playgroud)

然而,没有任何改变.Dotall应该是匹配的,这适用于在线正则表达式测试工具,但是在Perl中失败了.我究竟做错了什么?

regex perl

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

为什么Django在从脚本启动但不是以交互方式启动时会出现设置错误?

我正在尝试使用一些固定数据启动一个迷你Django测试服务器进行测试.

以交互方式(从REPL)循环运行时,它正确运行,当作为脚本的一部分执行时python myscript.py,它会失败.我猜测环境中有些不同,但是什么?

码:

import os
import sys
import json
import resttest
import unittest
from multiprocessing import Process
from django.core.management import execute_from_command_line

server_process = None
prefix = 'http://localhost:8000'

path = os.getcwd()
os.chdir('testapp') # Django project is separate and in subfolder 'testapp'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testapp.settings")
config_args = list()
config_args.append('')
config_args.append('testserver')
config_args.append('test_data.json')
proc = Process(target=execute_from_command_line, args=[config_args])
proc.start()
os.chdir(path)
Run Code Online (Sandbox Code Playgroud)

错误:

Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs) …
Run Code Online (Sandbox Code Playgroud)

python django multiprocessing

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