Tag: 操作系统

Java线程与操作系统线程

看起来我已经搞砸了Java Threads / OS Threads和Interpreted语言。 在开始之前,我确实理解绿色线程是Java线程,其中线程由JVM处理,整个Java进程仅作为单个OS线程运行。 因此,在多处理器系统上,它是无用的。 现在我的问题是。 我有两个线程A和B.每个都有10万行独立代码。 我在多处理器系统上的Java程序中运行这些线程。 每个线程都将被赋予一个本机操作系统线程到RUN,它可以在不同的CPU上运行但是由于Java被解释,这些线程将需要一次又一次地与JVM交互以将字节代码转换为机器指令? 我对吗 ? 如果是,那么对于较小的程序,Java Threads不是一个很大的优势吗? 一旦Hotspot编译这两个执行路径,两者都可以像原生线程一样好吗? 我对吗 ? [编辑]:一个替代问题可以是,假设你有一个单独的Java线程,其代码不是JIT编译的,你创建该线程并启动()它? 操作系统线程和JVM如何交互以运行该字节码? 谢谢

从java获取OS内存大小

有没有办法从java获取操作系统上的总内存大小? 运用 Runtime.getRuntime().maxMemory() 返回JVM的允许内存,而不是操作系统的内存。 有没有人有办法获得这个(从java代码)?

检测是否在Java中的用户计算机上安装了某些软件

我有一个Java应用程序,它需要某些软件(其中一个是Perl)才能运行。 我以前用来检测Perl的方法是: Runtime.getRuntime().exec(“perl Test.pl”); 如果有IOException声明没有Perl。 然而,我的一个用户抱怨该应用程序仍然失败,因为他没有将Perl置于他的路径变量中。 所以这就是我要问的原因:是否有任何跨操作系统方法来检测用户系统上是否安装了Perl(或任何其他软件)以及程序的路径?

为什么单个线程进程在多个处理器/内核上执行?

假设我运行一个简单的单线程进程,如下所示: public class SirCountALot { public static void main(String[] args) { int count = 0; while (true) { count++; } } } (这是Java,因为这是我所熟悉的,但我怀疑它并不重要) 我有一个i7处理器(4核,或8计数超线程),我正在运行Windows 7 64位,因此我启动了Sysinternals Process Explorer来查看CPU使用情况,正如预期的那样,我发现它使用了大约20%所有可用的CPU。 但是,当我切换每个CPU显示1个图形的选项时,我发现使用的是4个“核心”中的1个,CPU占用率遍布整个核心: 相反,我期望的是1核最大化,但这只发生在我将流程的亲和力设置为单核时。 为什么工作负载分散在不同的核心上? 不会将工作负载分散到多个核心,因为缓存还是会导致其他性能损失? 这是为了防止一个核心过热的简单原因吗? 还是有更深层次的原因? 编辑:我知道操作系统负责调度,但我想知道为什么它“烦恼”。 当然,从一个天真的角度来看,将(主要是*)单线程进程坚持到1核心是更简单,更有效的方法吗? *我说主要是单线程,因为这里有多个theads,但只有2个在做任何事情:

Java Thread优先级如何转换为OS线程优先级?

由于大多数操作系统没有与此匹配的线程优先级(就数量而言),因此java API线程优先级(1-10)如何转换为操作系统级优先级。 所以请记住,当两个或多个具有不同优先级的线程最终在操作系统级别获得相同的优先级时,会出现这种情况。 如果我的理解有所改正,请澄清一下。

我应该在哪里放置我的文件,以便在我运行jar时能够访问它们?

我将一些对象存储在文件中,一切都在Netbeans控制台中正常工作。 但是当我通过命令行(java -jar myapp.jar)运行JAR时,我得到了这个: 我应该在哪里放置文件,以便能够通过命令行运行应用程序?

是什么让线程的执行顺序变得不可预测?

是什么让线程的执行顺序变得不可预测? 调度程序在某些时候是使用随机数还是检查系统资源,或者查看哪个线程等待了足够长的时间或者……?

以编程方式设置dock:命名Java Mac OS X JVM属性

是否有设置Dock的编程替代方法:通过执行命名Java Mac OS X属性 java -Xdock:name=”My App Name” -jar myapp.jar ,或者这是设置dock:name属性的唯一方法吗?

Java Applet可以发现多少硬件细节?

我正在编写一个Java applet,以便在不同的硬件下以不同的方式运行。 例如,如果我知道计算机有大量的RAM但处理器很弱,我可以改变一些时间内存权衡的平衡。 能够发现运行applet的CPU的确切品牌和型号可能会有所帮助。 拥有这些信息将使我能够针对不同的系统对我的软件进行基准测试并找到瓶颈。 一般来说我正在寻找的是: 核心和/或处理器的数量 32位与64位CPU CPU缓存行大小 L1,L2,L3缓存的大小 设置缓存的关联性 TLB的大小 关于CPU的精确制造/型号信息 FSB信息 RAM的数量 交换/虚拟内存量 正在运行applet的JVM 操作系统运行JVM 系统负载 已使用/未使用的Kernal线程数 互联网连接的带宽 内存可用 显卡正在使用中 如果正在显示操作系统 正在使用的网络资源 是否有任何此类信息都包含在Java Applet中。 是否有用于查找此类信息的库? Applet基准测试工具来发现/猜测其中的一些? 你能想到任何聪明的技巧吗? 他们的计算机硬件的任何方面都是阻塞的。 也就是说,Java applet可以通过尝试访问它并被拒绝(可能是特定的TCP端口或图形加速器)来检测某些内容正在使用或不可用。 免责声明:我知道关心硬件违背了不关心硬件的Java意识形态。 虽然评论指出这可能对其他阅读此问题的读者有所帮助,但请注意,这些答案并不是我想要的。 编辑 添加了其他信息: java.lang中。 management提供有关运行JVM的系统的各种信息。 java.lang.management。 OperatingSystemMXBean提供: getAvailableProcessors()可用处理器的数量等效Runtime.availableProcessors() getSystemLoadAverage()系统上的平均负载,即系统最后一分钟的平均负载。 java.lang.management。 ManagementFactory getGarbageCollectorMXBeans()返回GarbageCollectorMXBeans的列表。 可以查询每个GarbageCollectorMXBean以获取以下信息: getCollectionCount()使用此bean发生的gc数。 getCollectionTime()在gc之间经过的近似累计时间(以毫秒为单位)。 (注意:Java虚拟机实现可能使用高分辨率计时器来测量经过的时间。) getName()内存管理器的名称。 getMemoryPoolNames()此gc管理的内存池。 getThreadMXBean()返回ThreadMXBean ,它提供: getCurrentThreadCpuTime()以毫秒为单位返回当前线程的总CPU时间。 […]

是否可以用Java编写设备驱动程序?

介绍 我听说过用Java编写设备驱动程序(听说“用我的耳朵”,而不是来自互联网)并且想知道……我一直认为设备驱动程序在操作系统级别上运行,因此必须用同一种语言编写作为操作系统(因此主要是CI假设) 问题 这个假设我一般都错了吗? (看起来如此) 如何在操作系统中使用“外星人”语言的驱动程序? 无论如何,对于设备驱动程序有什么要求(从编程语言的角度来看)? 谢谢阅读