我想在我的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
为什么这段代码有时会产生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)
更新
当发生这种情况时,我不知道字节的值,但似乎不应该有任何可能的字节值.
一旦发生一次,每次调用都会以相同的异常出错.
环境:
Run Code Online (Sandbox Code Playgroud)java version "1.8.0_20" Java(TM) SE …
我在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.lang.OutOfMemoryError: PermGen Space
在Sun的Hotspot JVM上运行时诊断错误,并且想知道我的程序在不同点上使用了多少PermGen空间.有没有办法以编程方式查找此信息?
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) 什么是Klass
与KlassKlass
在JVM中执行热点?
据我在文章介绍Perm生成中所理解的,Klass
是Java类的内部表示(比如说A
),它将保存有关类结构的基本信息,包括字节码.它将作为对象本身存储.A类的每个对象都有一个指向Klass
PermGen中内部表示的指针
KlassKlass是Klass
类本身的内部表示.为什么KlassKlass
需要?它存储了哪些额外信息?
此外,KlassKlass's
Klass
指针指向自身,我也不理解它.
升级到Java 8后,我的应用程序开始以非确定性方式失败.它不会抛出异常或打印错误消息.失败的唯一标志是退出代码-559038737.有没有遇到过这个?
为什么运行在服务器模式下的Java会说版本是"混合模式"?当我看到它时,是否意味着JVM没有真正加载到纯服务器模式?
我记得最初发布Java 7时,有许多建议不要将它用于任何事情,因为编译器优化中存在一些错误.这显然不仅仅是假设的.从那以后,我没有密切关注这种情况; 是否已经解决了这些问题,通常认为此时使用是安全的?
来自java.com的这个页面让我觉得它还没有准备好,但我不想过多地阅读它.如果它还不安全,是否足以-XX:-UseLoopPredicate
用作VM参数?
请注意,我不仅指代特定的Lucene问题,还指Java 7的一般稳定性.Java 7是否至少与Java 6一样稳定?
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 ×10
jvm-hotspot ×10
jvm ×6
java-8 ×2
permgen ×2
hotswap ×1
java-7 ×1
jit ×1
jvm-crash ×1
memory-leaks ×1