Tag: jvm

存储在JVM中的Object的实例变量在哪里?

Java中的对象的实例变量是存储在JVM的堆栈或方法区域中的吗? 另外,我们为多个线程设置了不同的实例变量吗? 如果它存储在方法区域中,实例变量与静态变量存储的不同之处是什么?

JVM如何确保新对象的内存分配的线程安全性

让我们假设这将在一个真正的并行环境中同时发生,一个VM: // Thread 1: new Cat() // Thread 2: new Dog() // Thread 3: new Mouse() JVM如何确保堆上内存分配的线程安全性? 堆是所有线程的一个,它有自己的内部数据。 为简单起见假设一个简单的压缩垃圾收集器实现,-XX:+ UseSerialGC -XX:+ UseParallelGC,带有简单的增量指针,用于标记可用空间的开始和Eden(堆)中的一个连续可用空间。 当为Cat , Dog和Mouse实例分配堆空间时,线程之间必须存在某种同步,否则它们很容易最终被覆盖。 这是否意味着每个新运算符都隐藏在一些同步块中? 这样,许多“无锁”算法实际上并不完全无锁;) 我假设内存分配是由应用程序线程本身同步进行的,而不是由另一个专用线程进行的。 我知道TLAB或线程本地分配缓冲区。 它们允许线程在Eden中具有单独的存储区域以进行分配,因此不需要同步。 但我不确定TLAB是否默认设置,这是一个非常模糊的HotSpotfunction。 注意:不要混淆TLAB和ThreadLocal变量! 我还假设,对于更复杂的垃圾收集器,如G1或非压缩垃圾收集器,必须维护更复杂的堆结构数据,如CMS的空闲块列表,因此需要更多同步。 更新 :请让我澄清一下。 我接受HotSpot JVM实现的答案以及有和没有活动TLAB的变体。 更新 :根据我的快速测试 , TLAB在我的64位JDK 7上默认设置为串行,并行和CMS垃圾收集器,但不适用于G1 GC。

在Sun JRE 1.6u20上-XX:+ AggressiveOpts启用了哪些标志?

从Sun JRE 性能调优白皮书中 , -XX:+AggressiveOpts标志描述为: 打开在即将发布的版本中默认启用的点性能优化。 按此标志分组的更改是对JVM运行时编译代码的微小更改,而不是不同的性能function(例如BiasedLocking和ParallelOldGC)。 这是尝试JVM工程团队即将发布的最新性能调整的好旗帜。 注意:此选项是实验性的! 此选项启用的特定优化可以在发行版之间进行更改,甚至可以构建为构建版本。 在部署新版本的Java之前,您应该重新评估此选项的效果。 我的性能测试表明使用-XX:+AggressiveOpts实际上有助于我的应用程序,但由于这被标记为实验,我想要小心它(我过去曾被它烧过)。 所以,我想知道-XX:+AggressiveOpts上启用了哪些标志-XX:+AggressiveOpts 1.6y20上的AggressiveOpts。 通常我通过查看hotspot/src/share/vm/runtime/arguments.cpp文件中的方法Arguments::set_aggressive_opts_flags()来做到这一点,但我无法在http://download.java找到1.6u20的源代码。 .net / jdk6 / source / 。 还有其他方法可以找出-XX:+AggressiveOpts启用的标志吗? 我在哪里可以获得1.6u20版本的资源?

Java的实现…… JVM?

前段时间我找到了MJVM项目。 可悲的是,这个项目已经被作者遗弃了(我通过电子邮件询问了Igor )。 我想知道是否有一个(继续的)开源项目,就像这样在Java中完全实现JVM。 “完全”,我的意思是,不仅要仿效移动设备。

UseAdaptiveSizePolicy和其他jvm选项

JVM选项-XX:+ UseAdaptiveSizePolicy被定义为热点人机工程学的一部分,可以使用吞吐量或暂停时间优先级进行指定。 但是,我的问题是 – 将NewSize和SurvivorRatio等其他jvm选项与之一起提及是否正确? 这样做的确切影响是什么?

java.exe,javaw.exe和jvm.dll之间的区别

使用java.exe,javaw.exe和jvm.dll运行应用程序(例如,Eclipse)有什么区别? 另外,它在性能方面有什么不同吗?

什么是JVM -server参数?

我在http://shootout.alioth.debian.org/中看到了Java -server用于编程语言基准测试。 我知道-server是运行JVM的参数。 我想知道: 当我们使用-server参数时它是如何工作的? 我们可以将此参数用于java桌面应用程序吗? 谢谢。

Java堆中的空格/代数之间的比率是否恒定?

我已经阅读了这篇关于虚拟机垃圾收集调优的文章 ,以便更好地理解java垃圾收集器。 每个空间都有一个虚拟堆空间区域,随着所需的堆空间越来越接近最大堆大小,它可以增长。 这可以在这张图片中看到: 几代人的Java GC安排http://sofzh.miximages.com/java/190244.gif 您可以使用NewRatio参数设置Young Generation和Old(Tenured)Generation之间的比率,以及使用SurvivorRatio参数设置Eden Space和Survivor Space之间的比率。 最近这个问题被问到要找出堆空间的默认比率。 它说你应该使用PrintGCDetails参数并手动计算比率。 我的问题是:不同堆空间的大小是否以相同的比率增加,从而在应用程序的整个运行时期间保持它们在启动时设置的比率不变? 例如,如果Young Generation和Old / Tenured Generation的默认NewRatio为3,则Young的初始保留堆空间为100MB,Old为300MB。 如果需要为Old Space保留更多内存,可以说300MB以上,总计600MB。 为Young Space保留的内存是否也会增加到200MB,保持比例不变?

尽管(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) 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 NMT [jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory […]

如何在没有JVM参数的情况下隐藏java 9中的“非法reflection访问”警告?

我只是尝试用Java 9运行我的服务器并得到下一个警告: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/azureuser/server-0.28.0-SNAPSHOT.jar) to constructor java.nio.DirectByteBuffer(long,int) WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release 我想隐藏此警告而不在启动期间向JVM选项添加–illegal-access=deny […]