标签: jvm-hotspot

我如何知道为Sun JVM启用了哪些默认设置?

我想在我的JVM上尝试CompressedOops.不,我想知道它是否可以默认启用.我在debian/squeeze上运行这个jvm:

$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)

有人说它默认启用,有人说它不是:

来自:http://forums.yourkit.com/viewtopic.php?f = 3&t = 3185

是的,你是对的,我也检查了它,并且在646位Java6u21中默认没有激活Compressed Oops,我不明白为什么它在我提供的链接中这么说.

我尝试用jconsole/JMX检查它,但没有运气找到名为CompressedOops或类似的属性.

有没有人知道我在哪里获得具有默认值的特定构建的所有jvm选项的列表?

关于Janning

java jvm jvm-hotspot

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

如何在String.valueOf(int)中使用ArrayOutOfBoundsException?

为什么这段代码有时会产生ArrayOutOfBoundsException?怎么可能String.valueOf(int)呢?

public static String ipToString(ByteString bs) {
  if (bs == null || bs.isEmpty()) {
    return null;
  } else {
    StringBuilder sb = new StringBuilder();
    boolean started = false;
    for (Byte byt : bs) {
      if (started) {
        sb.append(".");
      }
      sb.append(String.valueOf(byt & 0xFF));
      started = true;
    }

    return sb.toString();
  }
}


java.lang.ArrayIndexOutOfBoundsException: -81914
  at java.lang.Integer.getChars(Integer.java:458)
  at java.lang.Integer.toString(Integer.java:402)
  at java.lang.String.valueOf(String.java:3086)
  at com.mystuff.mypackage.ipToString(MyCode.java:1325)
  ...
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

更新

当发生这种情况时,我不知道字节的值,但似乎不应该有任何可能的字节值.

一旦发生一次,每次调用都会以相同的异常出错.

环境:

java version "1.8.0_20"
Java(TM) SE …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-hotspot java-8

28
推荐指数
3
解决办法
852
查看次数

JDK 8中的高级代码热插拔?

我在JavaVM中寻找更好的HotSwapping.能够仅应用方法体改变是可以的,但是非常有限.

可用选项是JRebel和一个名为动态代码演进虚拟机(DCEVM)的已停产项目.

有一个由DCEVM的核心开发人员编写的JEP 159.2011年的博客文章提到,DCEVM的开发人员现在可以使用Oracle将其集成到JDK中.

我们是否已经对JDK 8 beta有这种支持,还是推迟到JDK 9?

我需要热插拔来添加和删除以及重命名私有方法.这会有很多帮助.有没有一个产品允许我这样做(在JRebel旁边,公关活动让我感到不安).

最后支持的DCEVM版本是1.6u24,它只提供32位Linux二进制文件.由于我使用的是1.7和64位Linux,这对我来说都是一个显示器.

github上还有另一个名为Fakereplace的项目.这可以很容易地用于我的目的,还是我不应该调查这个?

java jvm-hotspot hotswap

26
推荐指数
2
解决办法
8553
查看次数

如何以编程方式找出我的PermGen空间使用情况?

我正在尝试java.lang.OutOfMemoryError: PermGen Space在Sun的Hotspot JVM上运行时诊断错误,并且想知道我的程序在不同点上使用了多少PermGen空间.有没有办法以编程方式查找此信息?

java memory-leaks permgen jvm-hotspot

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

尽管(Max)MetaspaceSize,Java 8仍为Metaspace保留最小1G

Java 8在启动后为Metaspace预留了1G.这意味着最小元空间大小为1G.但我将MetaspaceSize设置为300米,将MaxMetaspaceSize设置为400米.为什么Java会保留更多,然后我允许?

Java版本

$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

VM标志

$ jcmd 21689 VM.flags
21689:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=62914560 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1006632960 -XX:MaxMetaspaceSize=399998976 -XX:MaxNewSize=603979776 -XX:MetaspaceSize=299999232 -XX:MinHeapDeltaBytes=1048576 -XX:NativeMemoryTracking=summary -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC 
Run Code Online (Sandbox Code Playgroud)

NMT

[jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory
21689:

Native Memory Tracking:

Total: reserved=2769543KB, committed=1311159KB

-                     Class (reserved=1221904KB, committed=197904KB)
                            (classes #36543)
                            (malloc=3344KB #44041) 
                            (mmap: reserved=1218560KB, committed=194560KB) 
Run Code Online (Sandbox Code Playgroud)

就在开始之后

Total: reserved=2402748KB, committed=150796KB     

-                     Class (reserved=1056956KB, committed=7868KB)
                            (classes #1300) …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-hotspot jvm-arguments

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

什么是Klass&KlassKlass

什么是KlassKlassKlass在JVM中执行热点?

据我在文章介绍Perm生成中所理解的,Klass是Java类的内部表示(比如说A),它将保存有关类结构的基本信息,包括字节码.它将作为对象本身存储.A类的每个对象都有一个指向KlassPermGen中内部表示的指针

KlassKlass是Klass类本身的内部表示.为什么KlassKlass需要?它存储了哪些额外信息?

此外,KlassKlass's Klass指针指向自身,我也不理解它.

java jvm permgen jvm-hotspot

23
推荐指数
1
解决办法
5046
查看次数

JVM 8退出代码-559038737(0xDEADBEEF)

升级到Java 8后,我的应用程序开始以非确定性方式失败.它不会抛出异常或打印错误消息.失败的唯一标志是退出代码-559038737.有没有遇到过这个?

java jvm jvm-hotspot jvm-crash java-8

23
推荐指数
1
解决办法
1688
查看次数

为什么运行在服务器模式下的Java会说版本是"混合模式"?

为什么运行在服务器模式下的Java会说版本是"混合模式"?当我看到它时,是否意味着JVM没有真正加载到纯服务器模式?

java jvm jvm-hotspot

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

Java 7至少和Java 6一样稳定吗?

我记得最初发布Java 7时,有许多建议不要将它用于任何事情,因为编译器优化中存在一些错误.这显然不仅仅是假设的.从那以后,我没有密切关注这种情况; 是否已经解决了这些问题,通常认为此时使用是安全的?

来自java.com的这个页面让我觉得它还没有准备好,但我不想过多地阅读它.如果它还不安全,是否足以-XX:-UseLoopPredicate用作VM参数?

请注意,我不仅指代特定的Lucene问题,还指Java 7的一般稳定性.Java 7是否至少与Java 6一样稳定?

java jvm-hotspot java-7

20
推荐指数
1
解决办法
2839
查看次数

CompileThreshold,Tier2CompileThreshold,Tier3CompileThreshold和Tier4CompileThreshold控制什么?

HotSpot的分层编译使用解释器,直到调用(对于方法)或迭代(对于循环)的阈值触发具有自分析的客户端编译.使用客户端编译,直到另一个调用或迭代阈值触发服务器编译.

打印HotSpot的标志使用-XX:+ TieredCompilation显示以下标志值.

intx CompileThreshold      = 10000 {pd product}        
intx Tier2CompileThreshold = 0     {product}           
intx Tier3CompileThreshold = 2000  {product}           
intx Tier4CompileThreshold = 15000 {product}           
Run Code Online (Sandbox Code Playgroud)

仅有客户端和服务器编译器的标志太多.哪些编译器由这些标志控制?如果不是客户端和服务器,其他编译器的目的是什么?

在这种情况下是否忽略CompileThreshold和Tier2CompileThreshold?触发客户端编译时Tier3CompileThreshold控制什么?触发服务器编译时Tier4CompileThreshold控制什么?

java jit jvm-hotspot compiler-flags

20
推荐指数
1
解决办法
6207
查看次数