草庐IT

java - Young , Tenured 和 Perm 一代

我对Heap、Young、Tenured和Perm一代感到困惑。谁能解释一下? 最佳答案 Java垃圾收集器被称为通用垃圾收集器。应用程序中的对象存在不同的时间长度,具体取决于它们的创建位置和使用方式。这里的关键见解是,对短期和长期对象使用不同的垃圾收集策略可以针对每种情况专门优化GC。粗略地说,随着对象在年轻一代中“存活”重复的垃圾回收,它们被迁移到老一代。永久生成是一种特殊情况,它包含JVM所需的对象,但不一定在程序中表示,例如表示类和方法的对象。由于年轻一代中通常会包含大量垃圾,因此针对一次摆脱大量未使用的对象进行了优化。Te

java - 如何正确设置 permgen 大小?

我有这个带有tomcat、java和grails的VM。我一直收到permgen错误,所以我环顾四周并找到了解决方案:setJAVA_OPTS="-Xms256m-Xmx1024m-XX:PermSize=512m-XX:MaxPermSize=512m"我使用SSH访问vm并输入上面的参数。我想这会解决问题。问题是,我想确保我做得正确。所以我再次搜索了如何检查当前的permSize,这就是我得到的解决方案:jinfo-flagMaxPermSize64446444是pid,作为响应,我得到了这个。-XX:MaxPermSize=85983232问题:maxPermSize的值是否以字

java - 如何正确设置 permgen 大小?

我有这个带有tomcat、java和grails的VM。我一直收到permgen错误,所以我环顾四周并找到了解决方案:setJAVA_OPTS="-Xms256m-Xmx1024m-XX:PermSize=512m-XX:MaxPermSize=512m"我使用SSH访问vm并输入上面的参数。我想这会解决问题。问题是,我想确保我做得正确。所以我再次搜索了如何检查当前的permSize,这就是我得到的解决方案:jinfo-flagMaxPermSize64446444是pid,作为响应,我得到了这个。-XX:MaxPermSize=85983232问题:maxPermSize的值是否以字

java - 为什么使用invokedynamic 调用Java 8 lambda?

invokedynamic指令用于帮助VM在运行时确定方法引用,而不是在编译时对其进行硬接线。这对于在运行时才知道确切方法和参数类型的动态语言很有用。但Javalambda并非如此。它们被转换为具有明确定义的参数的静态方法。并且可以使用invokestatic调用此方法。那么invokedynamic对lambda有什么需求,尤其是在性能受到影响的情况下? 最佳答案 Lambda不是使用invokedynamic调用的,它们的对象表示是使用invokedynamic创建的,实际调用是常规的invokevirtual或调用接口(int

java - 为什么使用invokedynamic 调用Java 8 lambda?

invokedynamic指令用于帮助VM在运行时确定方法引用,而不是在编译时对其进行硬接线。这对于在运行时才知道确切方法和参数类型的动态语言很有用。但Javalambda并非如此。它们被转换为具有明确定义的参数的静态方法。并且可以使用invokestatic调用此方法。那么invokedynamic对lambda有什么需求,尤其是在性能受到影响的情况下? 最佳答案 Lambda不是使用invokedynamic调用的,它们的对象表示是使用invokedynamic创建的,实际调用是常规的invokevirtual或调用接口(int

Java - 获取 JVM 中加载的所有类的列表

我想获取属于某个包的所有类及其所有子类的列表。这些类可能已加载到JVM中,也可能尚未加载。 最佳答案 这不是程序化解决方案,但您可以运行java-verbose:class....JVM会转储它正在加载的内容,以及从哪里加载。[Opened/usr/java/j2sdk1.4.1/jre/lib/rt.jar][Opened/usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar][Opened/usr/java/j2sdk1.4.1/jre/lib/jsse.jar][Opened/usr/java/

Java - 获取 JVM 中加载的所有类的列表

我想获取属于某个包的所有类及其所有子类的列表。这些类可能已加载到JVM中,也可能尚未加载。 最佳答案 这不是程序化解决方案,但您可以运行java-verbose:class....JVM会转储它正在加载的内容,以及从哪里加载。[Opened/usr/java/j2sdk1.4.1/jre/lib/rt.jar][Opened/usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar][Opened/usr/java/j2sdk1.4.1/jre/lib/jsse.jar][Opened/usr/java/

java - JVM是开源代码吗?

JVM是开源代码吗?如果没有,如何获取JVM的代码? 最佳答案 这完全取决于你使用的JVM。如果您使用OpenJDKJVM,那么您可以从here获取源代码.如果您使用KaffeJVM,您可以从here获取源代码.如果您使用SunJVM版本6或更高版本,则可以从here获取源代码.如果您使用早于6的SunJVM,那么您通常可以在学术许可下获得源代码。如果您使用IBM、Oracle、HP或其他JVM,则源代码未打开。2013年5月更新仍然可以通过上面的链接访问第6版源,也可以通过thislink访问.后一个链接还包括一个方便的genea

java - JVM是开源代码吗?

JVM是开源代码吗?如果没有,如何获取JVM的代码? 最佳答案 这完全取决于你使用的JVM。如果您使用OpenJDKJVM,那么您可以从here获取源代码.如果您使用KaffeJVM,您可以从here获取源代码.如果您使用SunJVM版本6或更高版本,则可以从here获取源代码.如果您使用早于6的SunJVM,那么您通常可以在学术许可下获得源代码。如果您使用IBM、Oracle、HP或其他JVM,则源代码未打开。2013年5月更新仍然可以通过上面的链接访问第6版源,也可以通过thislink访问.后一个链接还包括一个方便的genea

java - JVM 堆参数

在阅读了关于该主题的已提出问题并进行了大量谷歌搜索后,我仍然无法清楚地了解-Xms选项我的问题是:java-Xms=512m-Xmx=512m和java-Xms=64m-Xmx=512m有什么区别?现在我有以下答案:唯一的区别是在我的应用程序运行期间将运行的垃圾回收数量和内存分配数量。我说的对吗?这是我回答这个问题的原因:将-Xms选项设置为512m不会导致我的应用程序在启动后使用真正的512M物理内存。我想这与现代操作系统虚拟内存管理和惰性页面分配有关。(我注意到将-Xms设置为512M或64M根本不会改变由Linux上的top报告的初始使用内存或通过Windows上的任务管理器)有