小编Squ*_*all的帖子

Java,JIT和垃圾收集器的效率

我想知道Java的效率以及Java虚拟机和Android的优缺点.效率是内存使用率低,处理器使用率低和执行速度快.

移动设备比PC更简单,然后应用程序需要更高效.服务器接收许多连接,它们需要非常高效.许多移动设备使用Android和Java应用程序,许多服务器使用PHP.

Java和解释语言(如Java Script,Python和PHP)能否比C和C++更高效?

JIT(及时)优势:

  • 它可以更好地进行优化,因为它知道某些变量的价值以及使用或更改的位置.
  • 它了解处理器并可以使用处理器特定指令进行优化.
  • 将函数转换为内联函数更容易.
  • 它可以删除已知的条件测试并删除不会运行的块.

Java缺点:

  • 当应用程序第一次运行时,应用程序将非常慢,因为字节码将被解释,JIT编译器将进行许多分析以找到良好的优化.应用程序无法使用最大的硬件电源.如果一个应用程序是一个游戏或一个实时应用程序,如果它是第一个成功运行并且没有延迟,但它使用最大的硬件功率,那么下次运行应用程序时,它将不会使用由于优化而产生的硬件功率最大值.问题是app无法设计为在优化后使用最大的硬件功率,因为​​它在第一次运行时会太慢,并且不会继续运行.
  • Java检查数组索引是否不在边界内,并检查指针是否为空.它将为生成的代码添加几个内部"if".
  • 所有对象都使用垃圾收集器,包括非常容易手动删除的对象.
  • 所有对象实例都是使用动态内存分配创建的,包括可以轻松使用堆栈的对象.如果循环迭代开始创建类的实例并结束删除创建的对象,则动态内存分配将是低效的.
  • 垃圾收集器需要在清理内存时停止应用程序,这对于游戏,GUI应用程序和实时应用程序来说是非常不受欢迎的.引用计数很慢,无法处理循环引用.多线程垃圾收集器速度较慢,需要更多地使用CPU.

java performance jit garbage-collection

4
推荐指数
1
解决办法
2543
查看次数

如何测试POSIX兼容性?

我正在用POSIX API编写一个C程序并使用Linux.我在朋友的Mac OSX PC上编译并运行它并且出现了一个小错误,但我没有使用Linux特有的功能.

我将使用Linux添加到API的一些特定功能.我还将为Mac Os X和FreeBSD使用特定的POSIX扩展.
我将使用条件编译来选择代码.如果OS不是那些,我将使用通用POSIX代码.

我不拥有Darwin/Mac OSX和FreeBSD,Linux是我在PC上唯一拥有的操作系​​统.我无法下载和安装FreeBSD,因为它超过500 MB.
我想知道一种方法来测试程序是否会在其他POSIX系统上按预期编译和运行.
我想知道是否有POSIX模拟器和编译器来进行测试.
测试很简单,它们不使用GUI和驱动程序,它们只是命令行.

我需要做3个测试:FreeBSD,Mac OSX/Darwin和Generic POSIX,但我没有这些工具.

编辑

有没有GUI的FreeBSD和Darwin的最小版本,但有GCC/G ++和ssh/scp?达尔文是免费的,不是吗?
我的电脑很旧,但我想我可以将它们安装在虚拟机中,创建虚拟网络并使用ssh/scp来传输和测试程序.

c linux testing compatibility posix

4
推荐指数
1
解决办法
1867
查看次数

如何将PC游戏移植到用C++编写的Android上

我想创建一个像Space Invaders这样的简单游戏.我知道我可以使用Android NDK,但我必须移植我使用的库.我不能使用第三方专有库.

我将使用OpenGL,但OpenGL API在Android上似乎有所不同.我必须使用jpeg和png纹理,并编写文本.我可以为Android编译libjpeg,libpng和freetype吗?

我不能具体的游戏引擎(C++)和渲染例程(C++和OpenGL)的实现,因为这是复杂的部分.

我准备为每个平台实现组件.窗口系统和用户输入没有问题,因为我将为每个系统使用特定的实现,这对我来说很简单.

我在PC上使用SDL及其音频扩展,但它易于使用.我可以使用Android的特定音频库.

谢谢

c++ android porting

3
推荐指数
1
解决办法
5237
查看次数

编写代码以帮助编译器进行优化

有谁知道编译器是否有优化源代码的列表?我更喜欢GCC作为例子.

我想知道程序员应该如何处理代码以获得良好的优化并帮助编译器优化它.程序员的一些优化可能会避免编译器做更好的优化.

例子:

replace
for (int i = 0; i < n - 1; i++ )
by
int n2 = n - 1;
for (int i = 0; i < n2; i++ )


for (int i = 0; i < n/2; i++ )
by
int n2 = n/2;
for (int i = 0; i < n2; i++ )



for (int i = 0; i < obj.calc_value(); i++ ) //calc_value() will return the same result with obj remaining unchanged.
by
int …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-optimization

3
推荐指数
1
解决办法
208
查看次数

来自C++的中间代码

我想将C++程序编译为中间代码.然后,我想用当前处理器的所有资源编译中间代码.

第一步是使用优化(-O2)编译C++程序,运行链接器并执行大部分编译过程.此步骤必须独立于操作系统和体系结构.

第二步是使用处理器的优化和特殊指令(-march = native),为当前计算机的操作系统和处理器编译第一步的结果,而不使用原始源代码.第二步应该是快速且软件要求最低.

我可以做吗?怎么做?

编辑:
我想这样做,因为我想分发一个独立于平台的程序,它可以使用处理器的所有资源,而不需要原始的源代码,而不是为每个平台和操作系统分发编译.如果第二步快速而简单,那将是件好事.

相同架构的处理器可能具有不同的功能.X86处理器可能有SSE1,SSE2或其他,它们可以是32位或64位.如果我为通用X86编译,它将缺乏SSE优化.多年以后,处理器将具有新功能,并且需要针对新处理器编译程序.

c++ compiler-construction optimization cross-platform intermediate-language

3
推荐指数
1
解决办法
1565
查看次数

如何在Java中使用加密?

我需要用加密技术保护一系列字节,我需要稍后恢复数据.我想使用密钥/密码来加密和解密数据.

我正在使用Java.如何使用Java中的密钥或密码加密和解密字符串?

谢谢.

编辑:方法不能慢.

java security cryptography

3
推荐指数
1
解决办法
2573
查看次数

等待定义时间的窗口消息

我正在用winapi编程.如何在指定时间内等待消息?如果没有消息,我可以做另一项任务.我无法使用Sleep,因为窗口回调程序将被延迟.

while (true){
    ...//wait a message for 30 miliseconds
    GetMessage(&message, hwnd, 0, 0) ) or PeekMessage(&message, hwnd, 0, 0, PM_REMOVE)
    ...
    if ( no_message ){
        call_a_function();
    } else {
        if (finish)
            break;
        TranslateMessage(&message);
        DispatchMessage(&message);
        ...//set to wait 30 minus elapsed time 
    }
}
Run Code Online (Sandbox Code Playgroud)

windows winapi loops window timer

2
推荐指数
1
解决办法
1067
查看次数

从函数返回查询?

我正在使用PostgreSQL 8.4,我想创建一个返回多行查询的函数.
下面的函数不能正常工作:

create function get_names(varchar) returns setof record AS $$
declare
    tname alias for $1;
    res setof record;
begin
    select * into res from mytable where name = tname;
    return res;
end;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

该类型record仅允许单行.

如何返回整个查询?我想使用函数作为查询模板.

sql postgresql function plpgsql

2
推荐指数
1
解决办法
381
查看次数

如何"取消包含"头文件?

我在文件中有一个类,AType.h它在AType.cpp中实现.

# include "PrivateType.h"

class AType{
    private:
    int a, b, c;
    PrivateType varX;

    public:
    ...
};
Run Code Online (Sandbox Code Playgroud)

我想在文件中使用类AType main.cpp,我需要包含AType.h,但我想避免包含PrivateType.h在main.cpp中.
我无法varX用malloc/new 创建.
main.cpp必须在编译时知道AType的大小.

目前的解决方案:(这很糟糕)

1 - 创建要打印的程序sizeof(AType).
2 - 更改标题:

# ifdef ATYPE_CPP
    # include "PrivateType.h"
#endif

class AType{
    private:
    # ifdef ATYPE_CPP
        int a, b, c;
        PrivateType varX;
    # else
        char data[ the size that was printed ];
    # endif

    public:
    ...
};
Run Code Online (Sandbox Code Playgroud)

3 - 而AType.cpp将从以下开始:

# define ATYPE_CPP …
Run Code Online (Sandbox Code Playgroud)

c c++ encapsulation include header-files

2
推荐指数
2
解决办法
6320
查看次数

Android NDK是否继承了Java问题?

我想为Android创建一个游戏,我需要在SDK和NDK之间进行选择.手机硬件有限,我想避免减速,但Java速度慢,占用内存过多.

NDK应用程序比SDK应用程序更快,更高效吗?

Java使用垃圾收集器,所有对象都在堆上分配,我不能在另一个对象内部分配对象(没有指针),并且用作结构的简单类继承Object类.

我的NDK程序是否会转换为Java字节码?编译器会忽略我的删除调用,添加垃圾收集器,添加Object类并将所有对象传输到堆中吗?

java performance android android-ndk

1
推荐指数
1
解决办法
2173
查看次数