jvm相关内容
JDK中的Java Mission Control工具提供有关新TLAB中的对象分配和TLAB外部分配的统计信息。 (它在内存/分配下)。这些统计数据的意义是什么,对于应用程序的性能有什么好处?我应该担心一些对象是否被分配到TLAB之外,如果是的话,我该怎么处理它? 解析方案 一个线程本地分配缓冲区。在HotSpot中分配正常方式的对象在TLAB中。因为分配缓冲区是线程本地的,所以只有在获取新的T
..
我转换到CMS收集器为我的应用程序和应用程序的吞吐量减少了一半。从GC日志中,我发现小GC发生的频率很高(小于code> 10每秒)。我已经分配了一个堆大小 4G 。 JVM默认使用非常小的尺寸(小于 40MB )。我想通过增加年轻gen的大小来尝试CMS。你能指出我对这个JVM参数吗? 我尝试了-XX:NewRatio,但JVM忽略了这个参数,并且年轻的gen size没有变化 我的Ja
..
在Java中,当对象被垃圾收集时, finalize 会在对象上被调用(即覆盖它),所以当它无法访问时。但是,如果终结器使对象再次可达,那么会发生什么呢? 解决方案 直到无法访问的对象才会收集对象再次。 根据 JavaDoc ,finalize()不会再被调用。
..
你们中的一些人可能知道一些核心java API对System.gc()进行了明确的调用。我知道发生这种情况的两种情况: NIO。当系统用完“直接”内存时,我相信这样做是为了对直接ByteBuffers进行一些清理。 RMI。在这里,原因对我来说不是那么清楚...... 所以,问题是: 是否知道RMI需要System.gc()的原因? 当核心API(或甚至一些其他流行的库)可以
..
[卸载课程太阳 [卸载类sun.reflect.GeneratedConstructorAccessor1896] [卸载类sun.reflect.GeneratedSerializationConstructorAccessor485] [卸载类sun.reflect.GeneratedSerializationConstructorAccessor579] .. .. //大概
..
我在这里找到了这些JVM标志。是否有更详细的解释,他们到底做了什么?设置这个标志将JVM产生的所有垃圾收集写入一个日志文件(或标准输出,但不那么有用),这些可以通过工具进行分析,如提到的那些工具此处。使用这些信息,您可以微调垃圾收集配置。
..
它是 ”不“ 可能,以便在VM启动后增加Java堆的最大大小。这是什么技术原因?垃圾收集算法是否依赖于具有固定数量的内存来处理?或者是出于安全原因,通过消耗所有可用内存来阻止Java应用程序DOS系统上其他应用程序的DOS应用程序? 解决方案 即使没有立即使用它,整个堆的地址空间也会在启动时保留。如果它不能为您传递的-Xmx的值保留足够大的连续地址空间块,则它将无法启动。这就是为什么在32
..
我正在阅读JVM调优,而我发现JVM在执行GC时会移动对象。但是Java对象之间有相互引用,哪一个可以假定为指针,但是JVM在每次移动对象后都不可能遍历整个堆,并且更新所有引用;当然,这将永远需要。那么如何解决引用问题,如果引用没有改变,但是这些对象的物理位置呢? 我已经读了很多关于JVM的内容,但是在任何地方都没有解释,甚至暗示。 [编辑]我的观点是引用是单向的。从指针指向指针是“瞬
..
我正在Linux 64位上运行带有8个核心CPU和6 GB内存的应用程序服务器。 服务器必须高度响应。 经过一番检查后,我发现运行在服务器上的应用程序创建了相当数量的短暂对象,并且只有大约200〜400 MB的长寿命对象(只要没有内存泄漏) 阅读 http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
..
据我所知,在Java虚拟机(JVM)中,当Java使用延迟加载过程加载类时,可能需要预热,因此您需要确保在启动主要事务之前初始化对象。我是一名C ++开发人员,无需处理类似的需求。 然而,我无法理解的部分如下: 您应该预热哪部分代码? 即使我预热了代码的某些部分,它仍然保持多久(假设这个术语仅表示类对象保留在内存中的时间)? 如果我每次收到事件时都需要创建对象,它有什么用处?
..
Java程序员知道JVM运行垃圾收集器,而System.gc()只是JVM运行垃圾收集器的建议。如果我们使用System.gc(),它不一定会立即运行GC。 如果我误解了Java的垃圾收集器,请纠正我。 除了依赖Java垃圾收集器之外,是否还有其他方式进行内存管理? 如果您打算通过一些有助于管理内存的编程实践来回答问题,请所以。 解决方案 关于Java内存管理最重要的事情是“取
..
我需要我的Oracle Hotspot比的默认参数更快地抛出一个异常 java.lang.OutOfMemoryError:超出GC开销限制 UseGCOverheadLimit 。 默认情况下,OOME在超过98%的时间用于GC时发生,并且不到2%的堆已恢复(如 http://www.oracle .com / technetwork / java / javase / gc-tuning
..
我正在使用 escape analysis ,以便更好地理解哪些对象有资格进行堆栈分配。 以下是我编写的用于测试堆栈分配的代码: import java.util.ArrayList; import java.util.Iterator; public class EscapeAnalysis { private static final long TIME_T
..
我在一台装有16Gb内存的计算机上运行一个内存密集型应用程序,还有一个8核处理器,以及所有在CentOS 5.2版本上运行的Java 1.6(Final)。精确的JVM详细信息如下: Java版本“1.6.0_10” Java™SE运行时环境(版本1.6 Java HotSpot™64位服务器虚拟机(构建11.0-b15,混合模式) 我使用以下命令行选项启动应用程序:
..
假设我正在测试一个Java服务器应用程序。我知道完成测试需要多少时间。现在我想知道在测试期间在GC上花了多少钱。我该怎么做?最简单的方法是使用 -Xloggc 和 在启动JVM时,c $ c> -XX:-PrintGCTimeStamps 选项。我认为它会显示垃圾收集需要多长时间。 http://www.oracle.com/technetwork/java/javase/tech/vmop
..
在一次采访中,我被问到计算 HashMap 的内存使用情况,以及如果您有200万个物品,它将消耗多少估计的内存。 例如: 地图>(); 映射就像这样。 键值 ----- - 一个键作为字符串,一个字符串数组作为键。 -
..
我对堆,年轻,终身和烫发一代感到困惑。 任何人都可以解释吗? 解决方案 简称为世代垃圾收集器。应用程序中的对象根据创建的位置以及使用方式而存在不同的时间长度。这里的关键洞察是,针对短期和长期使用的对象使用不同的垃圾收集策略可以使GC针对每种情况进行专门优化。 $ b 松散地说,作为对象“生存“的年轻一代重复的垃圾收集,他们被迁移到 。 永久代 是一个特殊情况,它包含JVM需要的对象,
..
对于Sun / Oracle的JVM,我已经读过GC算法将新一代划分为一个Eden地区和两个幸存者地区。我想知道的是,为什么两个幸存者地区,而不是一个?算法可以在伊甸园和只有一个幸存者地区之间保持乒乓球(目前在两个幸存者地区之间的方式);或者是否存在这种方法的缺点? 解决方案 我相信JRockit的GC实现更像你的建议,只有一个单一的伊甸园和单个幸存者空间,但不要引用我。 HotSp
..
使用XX:+ PrintGCApplicationStoppedTime -XX:+ PrintGCApplicationConcurrentTime添加到我的gc日志中! 但是发现只有在打印完4G或5G PrintGCApplicationStoppedTime后,通过-XX打印:+ PrintGCDetails命令! 根据定义PrintGCApplicationStoppedTim
..
如果堆满了,JVM会抛出一个 的OutOfMemoryError 。但是可以确定的是,一个(完整的)垃圾回收总是在引发这样的异常之前发生? 这意味着当引发异常时,内存只有强引用对象(或GC Roots可访问)才是完整的。 编辑:假设Sun JVM - HotSpot正在讨论中。 解决方案 The
..