问题内容: 我阅读了JVM内存模型,并对以下内容感到困惑: JVM是否将.class实例存储在其内存中。如果是,则在哪个区域。 就像在加载类后,JVM生成了机器级代码,然后开始执行机器代码指令,然后仅在堆上创建对象,并填充了方法区域。 perm gen等区域存储字节码还是机器级代码? 烫发与方法面积 我真的很感谢您对此主题的任何帮助。 谢谢。 问题答案: 1)文件将在加载时存储在permgen存储
问题内容: 查理·亨特(Charlie Hunt)在他的演讲中说,大型对象对JVM GC不利。因为: 大对象的分配和初始化非常昂贵。 不同大小的大对象可能会导致Java堆碎片化。 如何定义大对象?我怎么知道物体是否是大物体?谢谢 问题答案: 该定义取决于平台,JVM和JVM配置。例如,以下摘自Michael Kopp 的三篇大型JVM 博客文章 中的“垃圾回收如何不同” : 大小物体 JRocki
问题内容: 我一直想知道Java SE 6中吹捧的性能改进-是在编译器中还是在运行时中?换句话说,由JDK 6编译的Java 5应用程序是否可以在JSE 5下运行(表示改进的编译器优化)?由JDK 5编译的Java 5应用程序是否可以在JSE 6下运行(表示改进了运行时优化)? 我注意到,对于完全相同的代码库,在JDK 6下进行编译所需的时间几乎是在JDK 5下进行的两倍。我希望至少有一些额外的时
问题内容: 围绕静态最终常量进行一些优化(例如用文字替换变量等)以提高性能似乎是合乎逻辑的 问题答案: 对于可以内联常数(字符串,数字),编译 并 表现不同,是的。 当编译器发现一个常量表达式时,它将该常量表达式的结果嵌入到使用该常量表达式的代码中,而不是每次都对其进行计算。因此,如果您有: 那么常量值50将直接嵌入代码中。 请注意,这具有与之相关的版本说明警告- 如果更改或,则还需要重新编译引用
问题内容: 假设我正在测试Java服务器应用程序。我知道需要多少时间才能完成测试。现在,我想知道该测试期间在GC上花费了多少。我该怎么做? 问题答案: 最简单的方法是在启动JVM时使用和选项。我认为它可以打印出垃圾收集需要多长时间。 http://www.oracle.com/technetwork/java/javase/tech/vmoptions- jsp-140102.html
问题内容: 我的Windows的默认编码是GBK,而我的Eclipse完全是utf-8编码。 因此,在我的Eclipse中运行良好的应用程序崩溃了,因为将这些单词导出为jar文件时变得不可读; 我必须在.bat文件中写以下行才能运行该应用程序 现在我的问题是我可以在源代码中写一些东西来设置应用程序使用(或运行jvm)utf-8,而不是系统的默认编码。 问题答案: 打开文件进行读取时,需要显式指定要
问题内容: 说实话,我对所有这些术语(JDK / JRE / Java SDK)感到困惑。我不确定每个人都做什么。 当我第一次开始在Eclipse中制作简单的Java示例时,我很确定我只有JRE,我相信这是普通用户能够在其系统上运行Java程序/小程序的默认Java安装程序。 但是,现在在课堂上,我们正在使用Google Appengine,这需要JDK,我猜它与Java SDK相同。在浪费了一段
问题内容: 我正在研究真正了解JVM中内存分配的工作方式。我正在编写一个内存不足的应用程序:堆空间异常。 我知道我可以传入VM参数(例如Xms和Xmx)来增加JVM为正在运行的进程分配的堆空间。这是解决此问题的一种可能的解决方案,或者我可以检查代码是否存在内存泄漏并在那里解决问题。 我的问题是: 1)JVM如何实际为其分配内存?这与OS如何将可用内存传递给JVM有什么关系?或更一般而言,任何进程的
问题内容: 我只是尝试使用Java 9运行服务器,并收到下一个警告: 我想隐藏此警告而不在启动过程中添加到JVM选项。就像是: 有什么办法吗? 建议使用JVM选项的所有相关答案,我想从代码中关闭它。那可能吗? 要澄清-我的问题是关于从代码而不是通过类似问题中所述的JVM参数/标志来启用此警告。 问题答案: 有几种方法可以禁用非法访问警告,尽管我不建议您这样做。 1.简单的方法 由于警告已打印到默认
问题内容: HotSpot JVM标志有什么作用,什么时候应该使用它?在64位Java实例上使用它时(相对于未使用它),我会看到什么样的性能和内存使用差异? 问题答案: 默认情况下,去年的大多数HotSpot JVM均已启用它。此选项允许引用在64位JVM中为32位,并访问接近32 GB的堆。(可以使用32位以上的指针)(您也可以拥有几乎无限的堆外内存)。这样可以节省大量内存,并有可能提高性能。
问题内容: 为了在步骤之间传递变量,我有步骤方法属于同一类,并使用该类的字段作为传递的信息。 下面是一个示例,如下所示: 带有步骤定义的Java类: 我的问题是在步骤之间共享信息是否是一个好习惯?或者将功能定义为: 问题答案: 为了在步骤之间共享共同点,您需要使用World。在Java中,它没有在Ruby中那么清晰。 引用黄瓜的创建者。 “世界”的目的是双重的: 隔离方案之间的状态。 在场景中的步
问题内容: 参考:https : //bugs.java.com/bugdatabase/view_bug.do?bug_id=8186315 我真的很难找出MinRAMPercentage的功能,尤其是与InitialRAMPercentage相比。 我假设InitialRAMPercentage设置了启动时的堆数量,MinRAMPercentage和MaxRAMPercentage设置了允许J
问题内容: 本着Java的精神:为什么存在MaxPermSize?,我想问一下为什么Sun JVM对其内存分配池的大小使用固定的上限。 默认值为物理RAM的1/4(有上限和下限);结果,如果您有一个内存消耗大的应用程序,则必须手动更改限制(参数- Xmx),否则您的应用程序将运行不佳,甚至可能因OutOfMemoryError崩溃而崩溃。 为什么这个固定限制甚至存在?为什么JVM不能像大多数操作系
问题内容: 特别是,我想做这样的事情: 哦,我想这样做而不必修改pom文件或设置任何环境变量。 问题答案: 我认为最适合您。参见此处:http : //maven.apache.org/configure.html 在Unix中: 添加环境变量以指定JVM属性,例如。此环境变量可用于向Maven提供其他选项。 在Win中,您需要通过对话框设置环境变量 通过打开系统属性()添加…环境变量,…在同一对
问题内容: 我需要卸载已加载的DLL ,有人知道这是否可能吗? 问题答案: 我对此没有任何经验,但是有一点挖掘表明,当对加载库的类加载器进行垃圾收集时,应该卸载该库。 链接: 调用API文档(Sun)-查找“库和版本管理” Java JNI DLL卸载教程