相关疑难解决方法(0)

为什么返回Java对象引用比返回原语要慢得多

我们正在开发一个对延迟敏感的应用程序,并已对所有类型的方法进行微基准测试(使用jmh).在对查找方法进行微基准测试并对结果感到满意之后,我实现了最终版本,但却发现最终版本比我刚刚基准测试的版本3倍.

罪魁祸首是实现的方法返回一个enum对象而不是一个int.以下是基准代码的简化版本:

@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Thread)
public class ReturnEnumObjectVersusPrimitiveBenchmark {

    enum Category {
        CATEGORY1,
        CATEGORY2,
    }

    @Param( {"3", "2", "1" })
    String value;

    int param;

    @Setup
    public void setUp() {
        param = Integer.parseInt(value);
    }

    @Benchmark
    public int benchmarkReturnOrdinal() {
        if (param < 2) {
            return Category.CATEGORY1.ordinal();
        }
        return Category.CATEGORY2.ordinal();        
    }


    @Benchmark
    public Category benchmarkReturnReference() {
        if (param < 2) {
            return Category.CATEGORY1;
        }
        return Category.CATEGORY2;      
    }


    public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java low-latency jmh

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

何时最好使用堆栈而不是堆,反之亦然?

在C++中,何时最好使用堆栈?什么时候最好使用堆?

c++

60
推荐指数
5
解决办法
2万
查看次数

用于学习C程序设计的资源

来自OO背景(C#/ java)我正在寻找资源来学习如何很好地设计纯C程序.

虽然我熟悉C的语法,并且我可以编写小程序,但我不确定采用更大应用程序的方法,以及采用何种技术.你们可以推荐的任何东西.

编辑:我很高兴完全放弃OO用于C语言编程,我的兴趣是学习如何在没有OO的情况下构建程序,我想学习用C等过程语言设计程序的好方法.

c

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

何时以及为何使用malloc?

好吧,我无法理解何时以及为什么需要使用分配内存malloc.

这是我的代码:

#include <stdlib.h>

int main(int argc, const char *argv[]) {

  typedef struct {
    char *name;
    char *sex;
    int age;
  } student;


  //Now I can do two things
  student p;

  //or
  student *ptr = (student *)malloc(sizeof(student));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以使用时需要分配内存student p;

c malloc dynamic-memory-allocation

51
推荐指数
5
解决办法
5万
查看次数

48
推荐指数
7
解决办法
4321
查看次数

"ulimit -s unlimited"有什么作用?

有关堆栈分配的许多相关问题是可以理解的

堆栈和堆的内容和位置是什么?

为什么堆栈大小有限制?

堆栈和堆内存的大小

但是在各种*nix机器上,我可以发出bash命令

ulimit -s unlimited
Run Code Online (Sandbox Code Playgroud)

或者csh命令

set stacksize unlimited
Run Code Online (Sandbox Code Playgroud)

这如何改变程序的执行方式?是否对程序或系统性能有任何影响(例如,为什么这不是默认值)?

如果更多的系统细节是相关的,我主要关注在x86_64硬件上运行的Linux上使用GCC编译的程序.

linux stack ulimit

44
推荐指数
2
解决办法
10万
查看次数

堆栈和堆内存的大小

可能重复:
堆栈和堆的内容和位置是什么?

关于ac程序中内存布局的基本概念,我理解:

  • 该语言使用两个主要数据结构堆栈.
  • 创建堆栈以存储子程序的局部变量和簿记数据
  • 创建堆以存储程序的动态分配变量
  • 堆本质上是可变长度的.(在堆栈上不太确定)
  • 通常,编译器/语言负责在执行之前请求OS创建这些数据结构.

问题

  • 堆栈/堆的初始大小是多少?谁来决定呢?
  • 在哪里创建物理内存?我看到一般描述为"在顶级地址中创建堆栈,在低级别地址创建堆"请详细说明

c heap stack memory-management

43
推荐指数
4
解决办法
6万
查看次数

如何将NaN和Infinity的浮点数或双精度存储在内存中?

据我所知,java将存储器作为32位整数存储在内存中,具有以下属性:

  • 第一位用于确定符号
  • 接下来的8位代表指数
  • 最后的23位用于存储分数

这样就不会为三种特殊情况留下任何备用位:

  • 为NaN
  • 正无穷大
  • 负无穷大

我猜可以用负0来存储其中一个.

这些实际上如何在记忆中表现出来?

java nan infinity

39
推荐指数
3
解决办法
7108
查看次数

是否更快地访问堆中的数据?

我知道这听起来像是一个普遍的问题而且我已经看过很多类似的问题(无论是在这里还是在网上),但它们都不是真的像我的困境.

说我有这个代码:

void GetSomeData(char* buffer)
{
    // put some data in buffer
}

int main()
{
     char buffer[1024];
     while(1)
     {
          GetSomeData(buffer);
          // do something with the data
     }
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我在全局声明缓冲区[1024],我会获得任何性能吗?

我通过time命令在unix上运行了一些测试,执行时间之间几乎没有差异.

但我真的不相信......

理论上,这种变化应该有所作为吗?

c c++ heap performance stack

38
推荐指数
6
解决办法
3万
查看次数

堆与堆叠对比彼尔姆空间

  • Java内存空间(Perm Space,Space Stack,Heap Space)之间有什么区别?
  • JVM何时使用其中一个?
  • 如果我使用Scala/Groovy /等,是否存在差异?

java memory heap jvm

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