消除误解
本次开源的东西可以理解为用于快速调试的解释器(类似 flutter 的 jit模式),所以性能测试就当图一乐吧,哈哈。
不过java特性支持的确需要改进。
性能测试
简单的性能测试,代码如下(生成一亿个1,进行排序):(因为无法使用 java.util.Random 包,故生成固定数据)
之前出现过代码失误(不过对最终结果影响不大),现已更正。
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
int i = 0;
do {
i++;
list.add(1);
} while (1000000 >= i - 1);
long start = System.currentTimeMillis();
Collections.sort(list);
System.out.println(list.size());
System.out.println("it consumes " +(System.currentTimeMillis() - start) + "ms");
}
}
java结果: 3464ms

方舟编译器结果:跑了很久,然后炸了(内存溢出)

然而实际内存占用只有 270M左右(华为可能做了内存占用限制)

尝试修改数据到百万
java 用时:11ms

方舟编译器:19175ms

emm?负优化?

目前得到的回复是方舟编译器并没有限制内存使用,所以上图崩溃只能是性能问题了。😂
Java 可用性测试
简单的反射:正常
public class Main {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class c = Class.forName("F");
F f = (F) c.newInstance();
f.p();
}
}
class F {
void p(){
System.out.println("ok");
}
}

Scanner:无法使用
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextInt());
}
}

IO-写出:创建文件成功,写出失败
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String writerContent = "123";
File file = new File("1.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter writer = new FileWriter(file);
writer.write(writerContent);
writer.flush();
writer.close();
}
}

IO-读入: 失败
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("1.txt");
FileReader reader = new FileReader(file);
char[] bb = new char[1024];
StringBuilder str = new StringBuilder();
int n;
while ((n = reader.read(bb)) != -1) {
str.append(new String(bb, 0, n));
}
reader.close();
System.out.println(str);
}
}

Http请求:空指针
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Main {
public static void main(String []args) {
System.out.println(doGet("http://baidu.com"));
}
public static String doGet(String url) {
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null;
try {
URL u = new URL(url);
connection = (HttpURLConnection) u.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(15000);
connection.setReadTimeout(60000);
connection.connect();
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
assert connection != null;
connection.disconnect();
}
return result;
}
}

...
好吧,不测了。😂
要达到能用,还需要时间。