草庐IT

java - 多个 JVM 进程是否可以共享公共(public)类的内存?

我想在我的网络服务器上运行多个Java进程,一个用于每个网络应用程序。我正在使用具有大量支持类和jar文件的Web框架(Play),并且Java进程使用大量内存。一个Play进程显示大约225MB的“常驻私有(private)”内存。(我正在使用Java1.7.0_05在MacOSX上对此进行测试。)特定于应用程序的代码可能只有几MB。我知道典型的JavaWeb应用程序是添加到一个服务器进程(Tomcat等)的jars,但运行Play的标准方式似乎是作为一个独立的应用程序/进程。如果这些是C程序,那么这200MB中的大部分将是共享库,而不是在每个应用程序中重复。有没有办法在Java中实

java - Class对象A是在JVM加载A类时创建的,还是我调用A.class时创建的?

据我所知,每个类都有一个Class对象。我使用synchronize时有一种情况,例如:publicclassA{publicstaticvoidmain(String...args){synchronize(A.class){//dosomething...}}}这将锁定A的Class对象,对吗?这个Class对象是什么时候创建的?它是在JVM加载A类时创建的还是在我调用A.class时创建的?我在JLS中找不到详细信息,有人可以提供相关链接吗? 最佳答案 thiswilllockA'sClassobject,right?是的。m

java - 确保文件在 JVM 退出时被删除

File.deleteOnExit()是否保证即使JVM过早终止也能删除文件? 最佳答案 正如TimBender所说,File.deleteOnExit()不保证文件确实被删除。但是,在Unixish系统(例如Linux或OSX)上,可以在写入临时文件之前(但在打开它之后)将其删除。只要你为文件保留一个打开的描述符,你就可以继续读写它,即使目录树中不再存在该文件,操作系统也会自动回收文件使用的空间当你程序退出(或关闭文件的最后一个描述符)。这在Windows上不起作用,它具有不同的文件系统语义并且不允许删除打开的文件。但是,在可移植

java - JVM getObjectSize 示例

我在获取JVM中对象的大小时遇到​​了一些问题。JDK5提供了一个接口(interface)Instrumentation来通过premain()函数进行计算,但我不知道如何使用它。谁能帮帮我? 最佳答案 最简单和最有效的解决方案是使用非常小的sizeof库com.carrotsearchjava-sizeof0.0.3你需要用到这个http://grepcode.com/file/repo1.maven.org/maven2/com.carrotsearch/java-sizeof/0.0.2/com/carrotsearch/s

java - 为什么 JVM 总分配内存大于 -Xmx?

JVM选项:-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8正如预期的那样,JVM将为JVM堆分配近20MB的内存。但是请看下面的GC细节:PSYoungGentotal9216K,used4612K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)edenspace8192K,56%used[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000)fromspace1024K,0%used[0

java - 在其他项目中重用 Cucumber-JVM 步骤定义

如何在其他项目中重用Cucumber-JVM步骤定义来测试一些典型的Web操作。重点是我创建了一些java项目,只是使用典型场景操作的步骤定义实现,例如:WhenIfollowthelink"*some_link*"ThenIshouldseefollowingcontent"*some_content*"onpage而且我想在其他项目中重用这些定义(包括在类路径中),只是为了编写自己的简单场景。但是当我运行场景(作为JUnit测试)时,Cucumber无法找到步骤定义。当我尝试扩展StepDefinitions类时,它给了我一个错误,我无法扩展StepDefinition类。那么,是

java - 谁提供了Java中的默认构造函数?编译器还是 JVM?

构造函数是在运行时添加的还是编译时添加的?(我猜是编译时)。请在JVM架构级别进行一些深入的解释。我阅读了各种文章..一些说编译器..还有一些说JVM。我想非常确定(证据会有很大帮助)。抱歉,如果这个问题很愚蠢(我还在消化术语)!!!提前致谢。 最佳答案 来自Oracle的Java教程:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.htmlYoudon'thavetoprovideanyconstructorsforyourclass,butyoum

java - 智能 JVM 和 JIT 微优化

随着时间的推移,Sun的JVM和JIT变得非常智能。不再需要过去作为必要的微优化而成为常识的事情,因为它会为您处理。例如,过去的情况是您应该将所有可能的类标记为最终类,以便JVM内联尽可能多的代码。但是现在,JIT会根据运行时加载的类来知道您的类是否是最终类,如果您加载一个类以使原始类成为非最终类,它会取消内联方法并将其取消标记为final。JVM或JIT还为您做了哪些其他智能微优化?编辑:我将其设为社区维基;我想随着时间的推移收集这些。 最佳答案 这太令人印象深刻了。所有这些都是您在C++中不能做的事情(当然在Java中做不到)。

java - "modern JVMs"与旧版 JVM 有何不同?

这是我在高中和大学计算机科学类(class)中经常听到的一句话:"That'snotanissueformodernJVMs."通常这会出现在关于整体性能或优化策略的讨论中。然而,它总是被视为一种神奇的最终答案,好像它让问题不再值得思考。这让我想知道:原型(prototype)“现代JVM”和旧JVM之间到底有什么区别? 最佳答案 JVM技术最显着的改进是JIT:JustInTime编译器。JIT在运行时优化代码,从而产生巨大的性能提升,使Java(至少在某些领域)与C/C++程序竞争。有关动态优化(在代码运行时)与静态优化(在编译

java - 对于桌面和企业开发,是否有 Sun JVM 的可靠替代品?

根据Oracle方面最近的公告,我们已经开始制定一项计划,逐步停止从SunJVM迁移到我们最终会使用的任何可靠且免费的替代方案。OpenJDK显然会成为一个主要的选择,既然IBM已经宣布了它的重点,但就稳定性和可靠性而言,它要成为Sun现有JVM的替代品还需要一些时间。是否有任何JVM选项可以为现实生活中的关键任务应用程序提供支持?据我所知,IBM的JVM只能用于IBM硬件。如果您知道任何可以帮助我们描述JVM域的替代方案,我们将非常感谢您的反馈。我们在Eclipse生态系统方面做了大量工作,以jboss应用服务器为后盾,我们真的很想了解我们的选择,因为访问Oracle的JVM可能需要