java程序在不同平台下运行速度差异,求原因及解决办法!!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序在不同平台下运行速度差异,求原因及解决办法!!!!!相关的知识,希望对你有一定的参考价值。

1.在Windows XP下写的java程序,如Test.java。将Test.java和Test.class拷贝至Ubuntu9.10下测试:
a.运行Test.class文件,速度和在Windows平台下相当;
b.编译Test.java文件,运行生成后的Test.class文件,速度也和Windows相当。
c.在Windows下运行Test.class文件时的速度还算比较快。
2.在Ubuntu9.10下写的java程序,如Test.java。将Test.java和Test.class拷贝至Windows XP下测试:
a.运行Test.class文件,速度很慢,单击鼠标无法相应;
b.编译Test.java文件,运行生成后的Test.class文件,速度依然很慢。

附我用于测试的源代码:
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class TestFrame extends JFrame implements MouseListener

String s1 = new String (" Welcome !") ;

public TestFrame(String s)

int width = Toolkit.getDefaultToolkit().getScreenSize().width ;
int height = Toolkit.getDefaultToolkit().getScreenSize().height ;
this.setTitle(s) ;
this.setSize(400, 400) ;
this.setLocation((width-400)/2 , (height-400)/2) ;
this.setVisible(true) ;
this.setResizable(false) ;
this.setDefaultCloseOperation(EXIT_ON_CLOSE) ;
addMouseListener(this) ;


public void paint(Graphics g)

g.drawString(s1, 30, 100) ;


@Override
public void mouseClicked(MouseEvent arg0)
// TODO Auto-generated method stub



@Override
public void mouseEntered(MouseEvent arg0)
// TODO Auto-generated method stub
s1 = "Hello ,nice to see you !" ;


@Override
public void mouseExited(MouseEvent arg0)
// TODO Auto-generated method stub
s1 = "Goodbye!" ;


@Override
public void mousePressed(MouseEvent arg0)
// TODO Auto-generated method stub
s1 = "How are you doing ?" ;


@Override
public void mouseReleased(MouseEvent arg0)
// TODO Auto-generated method stub



/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
new TestFrame("Test");



我已发现问题并解决了!谢谢各位了!

参考技术A 这个程序的规模这么小,根本起不到测试的作用。
随机性太大了。
如果是有几十W以上的数据操作,或几千以上的对象操作,或几千W像素的绘图操作才有说服力。
参考技术B 平台不同,测试环境不同,运行速度当然不同。 参考技术C 我在ubuntu9.04下写的代码拿到xp运行没啥区别,反之也是 至于9.10么 由于那个家宽bug没装java就给卸了 莫非和ubuntu的版本有关本回答被提问者采纳 参考技术D 这个不会关编译环境的事吧,最多差异也是在JRE运行的时候

Java程序运行机制及开发环境

  1. Java既是编译型语言,又是解释型语言
    java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码运行。
  2. Java虚拟机JVM
    不同平台上的JVM不同,但是都提供了相同的接口。
  3. 开发Java准备
    • 下载安装Java8的JDK,并将jdk的安装路径添加到环境变量中。
    • 开发Java需要安装JDK,JDK包含Java编译器(javac命令工具)、Java运行时环境(JRE)、常用的Java类库等。
    • JRE包含JVM,还包含类加载器、字节码校验器及大量的基础类库等环境支持。
    • 如果只是运行Java程序,可以只安装JRE。
  4. 第一个Java程序
    • 编写第一个著名的程序:HelloWorld。

      pulic calss HelloWorld
      {
      public static void main(String[] args)
      {
      System.out.println("HelloWorld");
      }
      }
    • 使用javac命令编译java程序。
      • 命令行输入cmd,进入Java源文件所在的路径
      • 输入如下命令,其中destdir是目标生成路径
        javac -d destdir HelloWorld.java
      • 进入destdir路径下,可以看到已经生成了后缀名为.class的字节码文件
    • 使用java命令解释执行字节码文件。
      • 运行如下命令执行程序
        java HelloWorld
  5. Java程序的基本规则
    • Java是纯面向对象的语言,类是Java程序的最小程序单位。
    • javac可以编译一个类,而解释执行一个类则需要以main方法为入口,main方法的写法是固定的。
    • Java严格区分大小写,类名首字母大写,方法名第一个单词首字母小写,关键字小写。
    • 一个java源文件最多只能定义一个public类,因源文件名需要与public类的类名相同。
  6. 垃圾回收机制
    • 显式进行垃圾回收的缺点
      • 忘记回收导致内存泄漏,降低系统性能
      • 错误回收程序核心类库的内存,导致系统崩溃
    • Java虚拟机的堆内存用来保存类的对象,JVM的一个超级线程会进行检测,如果一个对象长时间不被引用GC会释放其所占用的内存空间,同时进行碎片整理将所占用的堆内存移到堆的一端,整理出新内存分配给其他对象。
    • 使用GC的优点
      • 提高编程效率
      • 保护程序的完整性和安全性
    • 使用GC的缺点
      • 垃圾回收在cpu空闲或者内存不足时进行,影响程序性能
    • GC的特点
      • 只能回收JVM堆内存的内存空间,不能回收物理内存的资源
      • 将对象的引用变量设置为null可以暗示GC回收该对象
      • 调用Runtime对象的gc()或者System.gc()仅仅是建议系统进行垃圾回收,不能精确控制
  7. 使用IDE工具
    • 下载安装Eclipse开发工具
    • 配置自动补全
      • Windows-Preferences-Java-Editor-Content Asist,将Auto activation triggers for Java改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可
    • 熟悉快捷键
      • 自动导入相关包:Ctrl+Shift+O
      • ...




以上是关于java程序在不同平台下运行速度差异,求原因及解决办法!!!!!的主要内容,如果未能解决你的问题,请参考以下文章

同一个java程序能在不同的操作系统平台上运行,这是怎么实现的?

深入理解 Java 内存模型

图解JAVA内存模型(JMM:JAVA Memory Model)

win7 64位安装anaconda3-5.2.0 64位安装到最后出错,是啥原因,求解决。

为啥我的机器运行速度超级慢?正常情况下都有那些进程启动项视该保留的?

IDEA运行Java程序打印到控制台很慢,怎么提升速度?