小编lev*_*tov的帖子

随机改组阵列

我需要随机调整以下数组:

int[] solutionArray = {1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1};
Run Code Online (Sandbox Code Playgroud)

这有什么功能吗?

java arrays shuffle

214
推荐指数
10
解决办法
42万
查看次数

System.nanoTime()完全没用吗?

Java博客文章Beware of System.nanoTime()中所述,在x86系统上,Java的System.nanoTime()使用CPU特定计数器返回时间值.现在考虑以下用于测量呼叫时间的情况:

long time1= System.nanoTime();
foo();
long time2 = System.nanoTime();
long timeSpent = time2-time1;
Run Code Online (Sandbox Code Playgroud)

现在在多核系统中,可能是在测量time1之后,线程被调度到不同的处理器,其计数器小于先前CPU的计数器.因此,我们可以得到time2中的值,该值小于 time1.因此,我们将在timeSpent中得到负值.

考虑到这种情况,是不是System.nanotime现在几乎没用?

我知道改变系统时间不会影响纳米时间.这不是我上面描述的问题.问题是每个CPU都会在打开后保留不同的计数器.与第一个CPU相比,第二个CPU上的计数器可以更低.由于在获取time1之后OS可以将线程调度到第二个CPU,因此timeSpent的值可能不正确甚至是负数.

java nanotime

151
推荐指数
8
解决办法
11万
查看次数

System.currentTimeMillis是否总是返回值> =之前的调用?

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()说:

以毫秒为单位返回当前时间.请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大.例如,许多操作系统以几十毫秒为单位测量时间.

我不清楚我是否保证这段代码将始终打印不断增加(或相同)的数字.

while (1) { 
    System.out.println(System.currentTimeMillis() );
}
Run Code Online (Sandbox Code Playgroud)

java linux

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

为什么IEEE 754保留了如此多的NaN值?

似乎IEEE 754标准将16,777,214个32位浮点值定义为NaN,或所有可能值的0.4%.

我想知道保留这么多有用值的理由是什么,而基本上只需要2个:一个用于信令,一个用于安静的NaN.

对不起,如果这个问题很简单,我在互联网上找不到任何解释.

floating-point nan ieee-754

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

29
推荐指数
3
解决办法
4万
查看次数

从Java 8开始有没有理由写`new Random()`?

出于某种原因,我常想,java.util.Random是线程安全的,一拉HashMapBitSet,并且Math.random()被实现为包装访问Randomsynchronized块,或ThreadLocalRandom.current().nextDouble().

实际上事实证明它java.util.Random是线程安全的(通过原子).因此需要注意的是:即使我需要在单个线程中使用一些随机输入,使用ThreadLocalRandom也是有意义的,因为内部没有原子读写,编译为锁定指令并发出内存屏障.

而且,由于Java 8 ThreadLocalRandom本质上是一个单例,它的状态保存在某些java.lang.Thread类的字段中.因此,方法ThreadLocalRandom.current()不是访问ThreadLocalMap,而只是静态字段读取,即非常便宜.

我有两个问题:

  1. 从计算机科学的角度来看,几个线性同余随机生成器(以ThreadLocalRandoms 的方式初始化)的输出是否与单个线性同余随机生成器(java.util.Random实例)的输出相同"随机" ?

  2. 如果回答的第一个问题是肯定的,是否有任何理由写的建设new Random()(不含种子)来代替ThreadLocalRandom.current(),永远不会消失?

更新.我应该调用像ThreadLocalRandom.current().ints().parallel().collect(...)可能是不正确的,因为线程的随机数生成器的状态可能中未初始化ForkJoinPool的工作线程,但看起来,ThreadLocalRandom覆盖方法ints(),longs()以及doubles(),使得上述结构正确.

java random java-8

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

Java 2D阵列填充 - 无辜的优化导致可怕的减速

我试图通过计算两个元素的每个和,相对于主对角线相反,优化每个元素的索引和的方形二维Java数组的填充.但是,代替加速或至少相当的性能,我的代码速度慢23(!)倍.

我的代码:

@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(ArrayFill.N * ArrayFill.N)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class ArrayFill {
    public static final int N = 8189;
    public int[][] g;

    @Setup
    public void setup() { g = new int[N][N]; }

    @GenerateMicroBenchmark
    public int simple(ArrayFill state) {
        int[][] g = state.g;
        for(int i = 0; i < g.length; i++) {
            for(int j = 0; j < g[i].length; j++) {
                g[i][j] = i + j;
            }
        }
        return g[g.length - 1][g[g.length - 1].length - 1];
    } …
Run Code Online (Sandbox Code Playgroud)

java arrays performance benchmarking multidimensional-array

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

如何在haskell中使用内联的相位控制?

文档,

有时您想要在GHC的管道中准确控制INLINE编译指示何时打开.

我为什么要这个?(除非我也使用RULES编译指示,在这种情况下,我可能希望推迟函数的内联,以便触发相关规则.)只有在简化过程的特定阶段才能更好地内联哪些函数?

performance haskell inlining ghc repa

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

消除Haskell数组边界检查有界类型?

我正在制作许多索引类型为Bounded且索引范围为的数组(minBound, maxBound).对于这样的数组,边界检查应该是不必要的.我如何说服GHC消除边界检查?

我的特定应用程序使用盒装和非盒装不可变数组,但我对所有类型的Haskell数组感兴趣.

arrays haskell ghc bounds-check-elimination

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

了解Hotspot JVM进程的内部碎片属性

对于堆上和堆外分配.在堆上 - 在三个主要垃圾收集器的上下文中:CMS,Parallel Old和G1.

我所知道的(或者我认为我知道)到目前为止:

  • 所有对象(堆上)分配都向上舍入到8个字节的边界(或更大的2的幂,由...配置)-XX:ObjectAlignmentInBytes.
  • G1
    • 对于小于区域大小的堆上分配(1到32 MB,可能在堆大小/2048 周围),没有内部碎片,因为没有必要,因为分配器永远不会"填充漏洞".
    • 对于区域大小越大的分配,它将分配到区域大小.I. e.分配区域大小+ 1字节是非常不吉利的,它浪费了近50%的内存.
  • 对于CMS,我发现的唯一相关信息是

    自然旧的空间PLAB模仿索引自由列表空间的结构.每个线程预先分配一定数量的每个大小的块,低于257个堆字(从全局空间分配的大块).

    来自http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html.据我所知,提到"全球空间"是主要的旧空间.

问题:

  • 以上陈述是否正确?
  • CMS中主要旧空间的碎片属性是什么?分配超过"257堆字"怎么样?
  • 如何使用Parallel Old GC管理旧空间?
  • Hotspot JVM是否使用系统内存分配器进行堆外分配,还是使用特定分配器重新管理它?

UPD.讨论主题:https://groups.google.com/forum/#!topic/mechanical-sympathy/ A- RImwuiFZE

java memory-management jvm-hotspot heap-fragmentation memory-fragmentation

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