小编Pet*_*rey的帖子

Java中的File.exists有多贵

我想知道它是如何File.exists()工作的.我不太清楚文件系统是如何工作的,所以我应该先开始阅读.

但是要获得快速的预先信息:

File.exists()如果在某个日志中注册了该路径和文件名,是对文件系统的单个操作的调用吗?或者操作系统是否获取目录的内容,然后通过它扫描匹配?

我认为这将取决于文件系统,但也许所有文件系统都使用快速方法?

我不是在谈论网络和磁带系统.让它保持ntfs,extX,zfs,jfs :-)

java filesystems directory file-io operating-system

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

为什么整数除法代码给出了错误的答案?

我在Java中有一个非常简单的划分(它是每小时的产品数量/产量),但每当我进行这个划分时,我都会遇到奇怪的错误:

float res = quantity / standard;
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上面的几个值的分区,但我总是得到错误,但是我在其他地方尝试并且正确的那个是这样的:

世界各地:

13.6 = 6800 / 500;
Run Code Online (Sandbox Code Playgroud)

Java的:

13.0 = 6800 / 500;
Run Code Online (Sandbox Code Playgroud)

我已经研究过BigDecimal和BigInteger,但是我还没有找到用它们创建这个除法的方法,有没有其他方法在Java中进行这种划分而没有精度错误?

任何帮助将不胜感激.

java floating-point division integer-division

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

静态变量的实际内存位置是多少?

静态变量是在程序执行的整个持续时间内分配的,因此堆栈和堆都不方便.那它在哪里?应该有一些装载的地方?

java memory garbage-collection memory-management

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

记忆障碍和TLB

内存障碍保证数据缓存一致.但是,它是否保证TLB一致?

我看到一个问题,当在线程之间传递MappedByteBuffer时,JVM(java 7更新1)有时会因内存错误(SIGBUS,SIGSEG)而崩溃.

例如

final AtomicReference<MappedByteBuffer> mbbQueue = new AtomicReference<>();

// in a background thread.
MappedByteBuffer map = raf.map(MapMode.READ_WRITE, offset, allocationSize);
Thread.yield();
while (!inQueue.compareAndSet(null, map));


// the main thread. (more than 10x faster than using map() in the same thread)
MappedByteBuffer mbb = inQueue.getAndSet(null);
Run Code Online (Sandbox Code Playgroud)

没有Thread.yield()我偶尔会在force(),put()和C的memcpy()中崩溃,这些都表示我试图非法访问内存.使用Thread.yield()我没有遇到任何问题,但这听起来不是一个可靠的解决方案.

有人遇到过这个问题吗?有关TLB和内存障碍的保证吗?


编辑:操作系统是Centos 5.7,我已经看到了i7和双Xeon机器上的行为.

为什么我这样做?因为写入消息的平均时间是35-100 ns,具体取决于长度,使用普通的write()并不是那么快.如果我在当前线程中进行内存映射和清理,则需要50-130微秒,使用后台线程执行此操作需要大约3-5微秒的主线程交换缓冲区.为什么我需要交换缓冲区呢?因为我写的是很多GB数据而且ByteBuffer的大小不能超过2 GB.

java centos memory-mapped-files tlb memory-barriers

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

我必须关闭FileInputStream吗?

我是测试自动化的实习生.我正在使用Eclipse创建Junit代码并使用Eclipse运行.我正在使用FileInputStream函数从excel表中重新获取数据.

FileInputStream fi=new FileInputStream("c:\\search.xls");
Workbook w=Workbook.getWorkbook(fi);
Sheet s=w.getSheet(0);
Run Code Online (Sandbox Code Playgroud)

是否有必要关闭Inputstream功能?如果是这样,请指导我一些编码.

java file-io inputstream

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

使用Java删除文件中的重复行

作为我正在进行的项目的一部分,我想清理一个我生成重复行条目的文件.然而,这些重复通常不会彼此靠近.我想出了一种在Java中这样做的方法(它基本上制作了文件的副本,然后使用嵌套的while语句将一个文件中的每一行与另一个文件中的其余部分进行比较).问题是,我生成的文件非常大而且文本很重(大约225k行文本,大约40兆).我估计我目前的流程需要63个小时!这绝对是不可接受的.

但是,我需要一个集成的解决方案.最好是Java.有任何想法吗?谢谢!

java file-io text file duplicates

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

是否有针对Java的开源堆外缓存解决方案?

Terracotta BigMemory有没有开源替代品?

实际上我甚至没有找到任何商业选择.我对纯Java解决方案很感兴趣,它可以在JVM中运行,而不需要任何JNI和C支持的解决方案.

java memory caching

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

有没有办法防止ClosedByInterruptException?

在下面的示例中,我有两个线程使用的一个文件(在实际示例中,我可以有任意数量的线程)

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class A {
    static volatile boolean running = true;

    public static void main(String[] args) throws IOException, InterruptedException {
        String name = "delete.me";
        new File(name).deleteOnExit();
        RandomAccessFile raf = new RandomAccessFile(name, "rw");
        FileChannel fc = raf.getChannel();

        Thread monitor = new Thread(() -> {
            try {
                while (running) {
                    System.out.println(name + " is " + (fc.size() >> 10) + " KB");

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        System.out.println("Interrupted");
                        Thread.currentThread().interrupt(); …
Run Code Online (Sandbox Code Playgroud)

java filechannel interrupt java-9

25
推荐指数
3
解决办法
1628
查看次数

如何减少Java的抖动?

为解决此问题,我创建了一个开源Java Thread Affinity库

当我有许多线程密切交互时,它可以减少延迟并增加吞吐量.对于单线程任务,它仍然可以减少相当多的抖动.


该程序查看调用System.nanoTime()和报告超过10x,000 ns 之间的时间差.

public class TimeJumpingMain {
    static final long IGNORE_TIME = 1000 * 1000 * 1000; // the first second to allow warmup.
    static final int minJump = 10; // smallest jump of 10 us.
    static final int midJump = 100; // mid size jump of 100 us.
    static final int bigJump = 1000; // big jump of 1 ms.

    public static void main(String... args) {
        int[] intervalTimings = new int[1000];
        int[] …
Run Code Online (Sandbox Code Playgroud)

java linux real-time

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

了解JVM内存分配和Java内存不足:堆空间

我正在研究真正了解内存分配在JVM中的工作原理.我正在编写一个应用程序,其中我将失去内存:堆空间异常.

我知道我可以将诸如Xms和Xmx之类的VM参数传递给JVM为正在运行的进程分配的堆空间.这是问题的一种可能的解决方案,或者我可以检查我的代码是否存在内存泄漏并解决问题.

我的问题是:

1)JVM如何为自己实际分配内存?这与操作系统如何将可用内存传递给JVM有何关系?或者更一般地说,任何进程的内存分配实际上如何工作?

2)虚拟内存如何发挥作用?假设您有一个具有32GB物理内存的系统,并且您将所有32GB分配给您的Java进程.假设您的进程实际上消耗了所有32GB的内存,我们如何强制使用虚拟内存而不是运行到OOM异常?

谢谢.

java memory jvm memory-management out-of-memory

24
推荐指数
2
解决办法
4万
查看次数