小编Bil*_*son的帖子

Oop Maps在Hotspot VM中的含义是什么?

我从一些文档中读到,Hotspot VM利用名为Oop Maps的数据结构来管理VM中的所有OOP.我的问题是,这个Oop Map数据结构何时生成?在编译时还是运行时?任何有关此问题的进一步详细文件都将受到欢迎.感谢你们.

java jvm jvm-hotspot

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

Java Integer左移的奇怪结果

我现在对java左移操作有点困惑,

1<<31 =  0x80000000  --> this I can understand
Run Code Online (Sandbox Code Playgroud)

1<<32 =  1       Why is this?
1<<33 =  2       
Run Code Online (Sandbox Code Playgroud)

看起来更多的移动值,采用模数32的值.

感谢大家的回复和JLS的报价.

我只想知道更多.知道它以这种方式设计的原因吗?或者只是一些惯例?显然C没有这个怪癖?

感谢@paxdiablo.看起来像C声明这个行为未定义.

我在这里有一些个人假设:

ARM体系结构参考手册A7.1.38

语法LSL Rd,Rm,#immed_5

哪里:

Rd 是存储操作结果的寄存器.

Rm是包含要移位的值的寄存器.

immed_5指定移位量,范围为0到31.

在指令级别,immedidate immed_5只需要5位就可以避免无意义的操作,从而节省一些指令空间.我想高级语言只是将这个约定统一起来,以避免在编译指令时产生无意义的努力.

java bit-manipulation bit-shift

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

我如何知道Linux进程的页面缓存大小

现在我可以通过/proc/meminfo知道系统总体的缓存页面,那么我是否可以进一步知道对于一个特定的进程它消耗了多少页面缓存?我的第一个想法是将进程的 smap 中的所有 RSS 相加。还有更多建议吗?谢谢。

kernel memory-management linux-kernel file-mapping

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

如何在Java泛型方法中正确返回泛型数组?

我有以下泛型方法,返回一个通用数组:

public static <T> T[] genericMethod1(List<T> input) {
    T[] res = (T[]) new Object[input.size()];

    int i = 0;
    for (T t : input) {
        res[i] = t;
        i++;
    }
    return res;
}

public static <T> T genericMethod2(List<T> input) {
    return input.get(0);
}
Run Code Online (Sandbox Code Playgroud)

但后来当我尝试使用以下结果获取结果数组时:

LinkedList<Integer> list = new LinkedList<Integer>();
list.addFirst(1);
list.addFirst(1);

Integer[] i = (Integer[]) genericMethod1(list);  // 1) Runtime error
Integer j = genericMethod2(list);        // 2) works
Run Code Online (Sandbox Code Playgroud)

对于案例1,我总是在运行时遇到错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么以及如何正确返回通用数组?谢谢.

以下是我的理解,如果我错了,请纠正我. …

java generics

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

带有第一个 jint 参数的 Android 静态 jni 方法收到错误值

我以这种方式声明了一个静态本机方法:

public native static void test(int w, int h);

然后我用 JNI 的方式声明了它:

void testJni(JNIEnv* env, jint w, jint h)

奇怪的是,w总是收到一个值看起来像一个指针,似乎 jclass/jobject 被传递给第一个参数w

相反,如果第一个参数不是 a jint,比如 a jstring,事情会正常工作。

有人可以解释为什么会这样吗?谢谢。

java java-native-interface android

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

什么是64位JVM上对象的默认哈希值

由于对象的默认哈希值是对象的对象地址,因此在32位机器上,考虑到哈希值是一个int值,这是有道理的.我的问题是在64位机器上,地址应该是64位对吗?那么32位int哈希值怎么样?是否会有一些下转换(从64位到32位)?

java hash

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

gcc何时生成<UNDEFINED>函数指令

我最近遇到了由故障添加器0xfffffab8引起的SEGV_MAPPER故障.但是没有地方可以明确地调用此地址.所以我使用arm-linux-androideabi-objdump转储了这样的库,并在函数中找到了几个地方:

000a42f8 <std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()>:
   a42f8:       4b08            ldr     r3, [pc, #32]   ; (a431c <std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()+0x24>)
   a42fa:       4a09            ldr     r2, [pc, #36]   ; (a4320 <std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()+0x28>)
   a42fc:       447b            add     r3, pc
   a42fe:       b510            push    {r4, lr}
   a4300:       4604            mov     r4, r0
   a4302:       589a            ldr     r2, [r3, r2]
   a4304:       4907            ldr     r1, [pc, #28]   ; (a4324 <std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()+0x2c>)
   a4306:       320c            adds    r2, #12
   a4308:       6022            str     r2, [r4, #0]
   a430a:       585b            ldr     r3, [r3, r1]
   a430c:       f103 0108       add.w …
Run Code Online (Sandbox Code Playgroud)

assembly gcc arm compilation

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

关于拇指 16/32 位混合指令流中的 arm pc 值

我阅读了几篇文章,其中包括 SO为什么 ARM PC 寄存器指向下一个要执行的指令之后的指令?,该 pc 寄存器值实际上是当前执行指令地址加上前面的 2 条指令,因此在 ARM 状态下它是 +8 字节(2*32 位)。

我的问题是,对于拇指状态,可能有 16 位或 32 位指令,这是否意味着对于 16/32 位指令,获取 pc 地址可能是 +4 字节或 +8 字节的偏移量?

例如:

279ae6: f8df 9338   ldr.w   r9, [pc, #824] --> pc value= 279aea or 279aee
279aea: f44f 7380   mov.w   r3, #256
279aee: 48cd        ldr r0, [pc, #820]
Run Code Online (Sandbox Code Playgroud)

我使用以下代码进行了更多测试:

1598:   467b        mov r3, pc
159a:   f8bf 4000   ldrh.w  r4, [pc]    ; 159c
159e:   46f9        mov r9, pc
15a0:   f83f 5001   ldrh.w  r5, [pc, …
Run Code Online (Sandbox Code Playgroud)

arm instruction-set thumb

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

函数调用的返回值是什么,如果该函数没有提供一个函数

假设我们有以下代码:

int func(char str[], int len) {
    // Don't return anything here.
}

int main() {
    char str[] = "Hello";
    int result = func(str, strlen(str));
    printf("%d\n", result);
}
Run Code Online (Sandbox Code Playgroud)

它会在我的电脑上打印一些字符串值-1679929632.当我执行时,它会不时变化.

谁能解释为什么会这样?

c stack-frame

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