Tag: jvm

JVM何时加载类?

假设我有以下课程: class Caller { public void createSomething() { new Something(); } } 会执行这一行: static void main() { Class clazz = Caller.class; } 导致JVM加载类Something或是延迟类加载,直到调用方法createSomething() ?

java 9中javax.activation包的替代品是什么?

似乎在Java 9中不推荐使用javax.activation包.Oracle迁移指南建议在JVM启动期间使用–add-modules java.activation选项。 但是,我想避免这种情况并替换javax.activation包的类,因为它已被弃用,并将在以后的Java版本中删除。 我想, javax.activation应该有某种替代方案。 如果有可用的,它是什么?

Linux JVM实际上是否实现了线程优先级?

写了一个快速的Java proggy以产生每个优先级的10个线程并计算pi(4 * atan(1)方法),每个BigDecimals 500,000次,加入每个线程并报告run方法的运行时间。 是的,可能不是最好的例子,但保持基本。 我知道Bug4813310 在C中做起来并非易事,但是我们可以假设在Linux JVM上永远不会设置原生优先级吗? $uname -r && grep bogomips /proc/cpuinfo 2.4.33.3 bogomips : 4312.26 $java -version 2>&1 |head -1 Java version “1.6.0_01” $javac T.java && java -Xmx32m -XX:+UseThreadPriorities T 1:3112 2:2636 3:2662 4:3118 5:2870 6:3319 7:3412 8:3304 9:3299 10:3069 看起来没有人会期待的偏差! 那是在一台小型虚拟Linux机器上。 也许只是Sun的? 我们将尝试IBM J9 VM: 1:4091 2:4142 3:3957 4:3905 5:3984 […]

在运行时释放OS的java内存。

假设我有一个Swings Java应用程序,我设置最小堆是64MB和最大堆2GB,当用户启动应用程序时,将显示登录屏幕,此时应用程序使用64MB,权限? 从我的Windows 7中,我可以看到java应用程序从操作系统的内存资源监视器中分配了64MB(实际上,它超过64MB,因为JVM需要一些内存来完成它的任务)。 之后,用户执行了一些非常繁重的工作,然后应用程序使用2G。 然后用户注销应用程序,再次显示登录屏幕(应用程序尚未关闭)。 此时应用程序使用64MB的实际内存(假设这是完美的内存管理应用程序),但是这个应用程序的OS仍在使用2G的RAM,我可以在OS的资源监视器上看到它。 我希望我的应用程序在不需要使用大内存时将内存释放到操作系统。 我可以在运行时使用java应用程序吗? 我的意思是当我的应用程序需要使用64MB的Ram,然后操作系统只给它64MB,当它需要2GB的RAM然后OS给它2GB,之后它需要64MB的ram然后操作系统再给它64MB,我不要浪费2000MB – 64MB = 1936MB。 我能这样做吗? 谢谢,

是否可以使用sun.misc.Unsafe在没有JNI的情况下调用C函数?

一段C / C ++代码可以为JNI方法提供一个函数指针数组。 但是有没有办法直接从Java代码内部(不使用JNI或类似代码)调用数组指针指向的函数? JNI以某种方式做了类似的事情,所以必须有办法。 JNI是如何做到的? 是通过sun.misc.Unsafe吗? 即使不是,我们是否可以使用一些不安全的解决方法来获取执行该操作的JVM代码? 我当然不打算在商业上使用它。 我甚至不是专业人士,我只是非常喜欢编码而且我最近一直在研究CUDA,所以我想也许我可以尝试将所有东西混合在一起,但JNI调用的开销会破坏GPU加速代码的目的。

同时运行在同一个JVM上运行的java程序?

假设我在同一台机器上同时运行两个java程序。 程序是在单个JVM实例中运行还是在两个不同的JVM实例中运行?

JVM进程与JVM堆内存使用情况

我已经阅读了这个Process Memory Vs Heap – JVM ,我遇到了同样的问题。 jvm进程内存使用量不断增加,从不收缩。我通过在linux服务器上做一个top来检查。 应用程序正在将作业调度到集群(使用Quartz + Sun Java DRMAA API) Java堆空间在应用程序生命周期中保持在限制范围内,但是jvm进程显示内存使用量稳步攀升并且永远不会下降。 这是内存泄漏吗? 如果是这样,为什么堆空间在限制范围内。 有人可以解释一下。 更新:当我通过jconsole跟踪时,我有-Xmx1600m -Xms1600m我可以看到堆空间在这个限制范围内,距离为450m,但是top命令显示该进程使用了​​超过900m。

哪些参数代表JVM内存选项中的内容?

有很多JVM参数影响JVM的内存使用情况,如-Xms, -Xmx, -Xns, -XX:MaxPermSize… 他们在做什么? 还有吗? 当我得到什么错误时,我必须增加哪一个(例如OutOfMemoryError , StackOverflowError …)? 我找不到一个好的备忘单 – 让我们在这里创建一个。

JVM在哪里存储原始变量?

Java JVM在哪里存储原始变量,以及原语在使用后释放的内存如何释放? 我猜它是在堆栈上?

缺少`server’JVM(Java \ jre7 \ bin \ server \ jvm.dll。)

得到JVM 错误 ,它缺少一些dll 。