Tag: jvm

如何用Java编写JVM?

我简要阅读了关于Maxine ,这是一个用Java编写的开源JVM实现。 这听起来像是循环的。 如果java需要运行一个虚拟机,那么虚拟机本身如何用Java编写(VM代码是否需要运行的虚拟机,等等)。 编辑 :好的,所以我看到我忽略了Java不必在虚拟机中运行的事实。 那么如何解释一个LISP编译器如何在LISP中编写呢? 或者这应该是一个新的问题呢?

Java VM vs .NET CLR的基准testing性能

你有没有必要certificateselect使用.NET而不是基于性能的Java? 对于可以执行以下操作的典型的大容量事务处理系统, 并发数据库事务 math计算 与其他Web服务交互(SOAP / XML,XML-RPC) 我的方法是在JVM和.NET CLR的C#中都使用Java编写基准testing,并在不同负载水平下对上述操作进行基准testing,并比较结果。 除了语言和平台偏好之外, 我有兴趣了解如何在Java VM和.NET CLR之间做出决定性的性能比较 ? 是否有任何全面和受尊重的基准?

Java系统属性的范围

在Java中,我们使用System.setProperty()方法来设置一些系统属性。 根据这篇文章 ,使用系统属性是有点棘手。 System.setProperty()可能是一个邪恶的电话。 这是100%的线程敌对 它包含超全局variables 当这些variables在运行时神秘地改变时,debugging是非常困难的。 我的问题如下。 系统属性的范围如何? 它们是特定于每个虚拟机,还是具有“超级全局性质”,在每个虚拟机实例上共享同一组属性? 我猜想选项1 是否有任何工具可用于监视运行时更改以检测系统属性中的更改。 (只是为了方便问题检测)

Java的“os.name”为Windows 10?

在Java中,我们可以看到os.name的属性值来知道底层操作系统的名称: System.getProperty("os.name") 。 对于Windows的每一个版本,它总是返回操作系统的确切名称: Windows XP for XP, Windows Vista for Vista, Windows 7 for Seven, Windows 8.1 for 8.1等等… 问题是:我只是使用发布的微软更新程序将Windows 8.1更新到Windows 10,而且似乎仍然保留Windows 8.1 : public class OSTest { public static void main(String[] args) { System.out.println(System.getProperty("os.name")); } } 我怎样才能为此创build一个解决方法? 而且,有没有人知道如果这个问题仍然存在,如果安装新的Windows 10副本 – 也就是说,这个错误是由微软自动更新引起的?

为什么将类定义为final可以提高JVM的性能?

从http://sites.google.com/site/gson/gson-design-document引用: 为什么Gson中的大多数课程都被标记为final? 虽然Gson通过提供可插入序列化器和反序列化器提供了一个相当可扩展的体系结构,但Gson类并不是专门devise为可扩展的。 提供非最终的类将允许用户合法地扩展Gson类,然后期望该行为在所有后续的修订中都能正常工作。 我们select通过将类标记为final来限制这种使用情况,并等待一个好的用例出现以允许可扩展性。 标记一个类最终还有一个小优点,即为Java编译器和虚拟机提供额外的优化机会。 这是为什么? [如果我猜测:JVM知道类是final的,它不维护方法覆盖表? 还有其他原因吗?] 性能有什么好处? 这是否适用于频率实例化的类(POJO?),或者适用于持有静态方法的类(实用程序类)? 定义为最终的方法在理论上也可以提高性能? 有什么影响吗? 谢谢,Maxim。

无法分配请求的地址:JVM_Bind

当我试图build立一个套接字服务器,我有一个错误信息: Exception in thread "main" java.net.BindException: Cannot assign requested address: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383) at java.net.ServerSocket.bind(ServerSocket.java:328) at java.net.ServerSocket.<init>(ServerSocket.java:194) at java.net.ServerSocket.<init>(ServerSocket.java:106) at socketyserver.SocketyServer.main(SocketyServer.java:12) Java Result: 1 整个代码是最简单的,因为它可以是: public static void main(String[] args) throws UnknownHostException, IOException { ServerSocket serverSocket; serverSocket = new ServerSocket(9999); } 我100%确定我的端口被转发,Windows防火墙closures。 什么都不会阻塞端口9999。还有什么可以出错?

java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):JVM_Bind

Tomcat正在Windows下运行一个web应用程序。 在几天之后(在非常低的负载下),标题中提到的exception开始出现在日志中,从那时起不能build立新的连接,唯一的修复就是重启服务器。 环境: 最新的Tomcat 6 Windows Server 2008 R2 JDK 6更新30 SQL Server 2008 Kerberos身份validation 迄今收集的证据: netstat显示没有过多的连接 ProcessExplorer不显示过多的打开文件句柄 系统主内存使用率是平均的 JVM堆的使用率是平均的 重新启动Tomcat并不能解决问题 打开问题: 如果我们连接泄漏,不应该显示在netstat? 不应该重新启动应用服务器解决问题,因为操作系统应该释放所有的进程资源? 有没有办法将问题追溯到原点? 如安装监控软件,可能类似于lsof等? 我出来的想法,任何提示赞赏!

自JVM启动以来的时间

有没有办法找出自JVM启动以来的时间? 当然,除了在main的开始附近启动一个计时器,因为在我的场景中,我正在编写库代码,而且在启动后立即调用某些东西的要求太麻烦了。

使用JAVA_OPTS envvariables运行java

在一个shell脚本中,我已经设置了JAVA_OPTS环境variables(启用远程debugging和增加内存),然后执行jar文件,如下所示: export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n -Xms512m -Xmx512m" java -jar analyse.jar $* 但似乎没有任何效果的JAVA_OPTS envvariables,因为我无法连接到远程debugging,我看不出JVM的内存的变化。 可能是什么问题呢? PS:我不能在java -jar analyse.jar $*命令中使用这些设置,因为我在应用程序中处理命令行参数。

我如何指定我从eclipse运行的程序的默认JVM参数?

有没有一种方法来指定默认的JVM参数,当我从eclipse运行我的代码,而不是一遍又一遍地指定每个运行/debugging/ etcconfiguration相同的?