Tag: jvm

java.util.Date的有效范围?

我可以在java.util.Date中存储的有效值的范围是多少? API没有多说这个。 或者它是否仅支持可以表示为unix时间戳的日期(即1.1.1970之后的日期)? 如果是这样,JDK中是否有一个(可序列化的)类支持之前的日期? 我正在寻找的是db4o中生日字段的类/类型

AtomicInteger实现和代码重复

警告:问题有点长,但分隔线下方的部分仅用于好奇。 Oracle的AtomicInteger的JDK 7实现包括以下方法: public final int addAndGet(int delta) { for (;;) { int current = get(); int next = current + delta; // Only difference if (compareAndSet(current, next)) return next; } } public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; // Only difference if (compareAndSet(current, […]

为什么max heap在运行时会发生变化?

我们有一个在openjdk8中运行的Java应用程序,其最大堆内存在运行时更改 – 可能是什么原因? 我发现问题为什么堆在java中发生了变化,这指的是解释max和committed memory之间差异的文章。 在我们的例子中,似乎这两个通常是相同的,但并非总是如此 – 请参阅下面截图的11:53。 堆也可以更改为年轻代串行收集器( -XX:MaxHeapFreeRatio ,请参阅鼓励JVM到GC而不是增长堆? ),但是我们使用并行收集器,所以情况并非如此。 我们运行应用程序的内存相关JVM参数: -XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m 不确定它是否相关,应用程序在11:55到11:58之间对老一代进行了并行标记扫描 – 此时有超过200MB的可用内存可用,我们看不出任何这种行为的原因。

Java8元空间和堆使用情况

我有这个代码动态生成类并加载它 import javassist.CannotCompileException; import javassist.ClassPool; public class PermGenLeak { private static final String PACKAGE_NAME = “com.jigarjoshi.permgenleak.”; public static void main(String[] args) throws CannotCompileException, InterruptedException { for (int i = 0; i < Integer.MAX_VALUE; i++) { ClassPool pool = ClassPool.getDefault(); pool.makeClass(PACKAGE_NAME + i).toClass(); Thread.sleep(3); } } } 我针对Java 7(jdk1.7.0_60)启动了这个类,正如预期的那样,它填满了PermGenSpace并且堆仍未使用 图像显示permgen使用超时,最后JVM终止 现在相同的代码针对Java 8(jdk1.8.0_40-ea)运行,并且正如预期的那样它继续扩展本机内存(Metaspace)但令人惊讶的是,1g的Metaspace它在OldGen中消耗了3g的堆(随着时间的推移几乎是Metaspace的3倍) 图像显示Metaspace使用超时和系统内存使用示例 这封来自Jon Masamitsu的电子邮件和这张JEP门票说 interned […]

监视Java应用程序上的锁争用

我试图创建一个小的基准(在Groovy中),显示几个同步方法的高线程争用。 监控自愿上下文切换时应该出现高争用,而在Linux中,这可以通过“pidstat”来实现。 该计划如下: class Res { private int n; synchronized public void inc() { n++; def foo = [] for (int i = 0; i < 1000; ++i) foo << "hello" } synchronized public int getN() { return n; } } while (true) { Res res = new Res() int N = 100000 for (int […]

在ExecutorService中hibernate一个线程(Java / Clojure)

我在clojure程序中创建了相当多的线程: (import ‘(java.util.concurrent Executors)) (def *pool* (Executors/newCachedThreadPool)) (defn do-something [] ; work Thread/sleep 200 ; repeat) (dotimes [i 10000] (.submit *pool* do-something)) 对我来说,JVM之间已经有一段时间了,我基本上在想这里是否有任何反对在Executor正在执行的函数内使用sleep或yield的论据? 如果我理解正确,在这种情况下,我的每个工人都有自己的线程,因此不应该有任何副作用。 如果Executor使用的是FixedThreadPool: (Executors/newFixedThreadPool 1000) 事情变得更加复杂,因为线程在工作完成之前不会返回到池中,这意味着如果线程处于hibernate状态,其他排队的工作人员将需要更长的时间才能完成。 我对这种情况下的线程理解是否正确? (注意:我怀疑我的设计确实是错误的,但只是想确保我在正确的页面上)

IntelliJ调试:暂停整个VM然后单步执行

我正在调试一个有很multithreading的应用程序。 我的断点设置为暂停整个VM。 当一个线程遇到其中一个断点时,我想要使用Step Over。 但这似乎恢复了整个VM,直到该步骤完成。 如果我可以仅仅执行到达断点的单个线程,那将非常有用。 有没有办法在IntelliJ 11.1 / Java 6中执行此操作? (希望我不会错过任何明显的东西……)

是否可以在每个子线程中有2个具有不同类路径的子线程?

我有一个“核心”应用程序,它是处理任务的适配器。 每个任务都由核心的适配器负载实现,以处理任务。 我的问题是,是否可以在每个适配器中使用不同的类路径来预备适配器之间的类/ jar冲突。 问候,

集群环境中的Spring Singleton

正如本文所讨论的,不适合在集群环境中使用单例(因为不同JVM中有多个单例对象),对于Spring框架创建的单例,这一点必须如此。 如果这是正确的,那么我们必须非常小心使用Spring框架来使用单例类。 你能否告诉我这是否正确理解?

Java最小化依赖关系

我有一种情况,其中有一小段Java代码,它依赖于大量的jar。 但是,这些jar中的依赖关系非常浅。 在大多数情况下,它仅依赖于单个界面的jar。 我不想将所有jar分发给应用程序,而是将特定的类文件分发到它实际使用的jar中。 这样做的原因是为了节省空间(此代码将存在于applet中)。 有谁知道自动执行此操作的工具或方法? 假设所有依赖项都是静态的,这似乎完全有可能。 有任何想法吗?