1.尽量减少值传递,多用指针和引用来传递参数 值传递要拷贝对象,引用传递不用 2.++i和i++的效率问题 i++开辟了临时变量,效率低 3.将小粒度函数声明为内联函数 内联函数直接会直接展开,不需要函数调用的开销 4.减少函数调用 函数调用需要两次跳转,外加栈帧的内存操作 5.优先使用迭代而不是递 ...
分类:
编程语言 时间:
2019-03-20 22:13:12
阅读次数:
167
关键词:协程 栈帧 指令 切换 跳转 Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be ...
分类:
其他好文 时间:
2019-03-05 19:55:51
阅读次数:
128
假设我们写了一个C代码文件 code.c包含下面代码:int accum = 0;int sum(int x, int y){ int t = x + y; accum += t; return t;} 这是用echo命令输入源码的效果,简单的就是最好的:) 一、查看GCC生成的汇编代码 在命令行上 ...
分类:
其他好文 时间:
2019-03-03 09:24:34
阅读次数:
184
方法一:也是 比较好用的,功能教齐全 缺陷:format 和 format_map() 的一个缺陷就是它们并不能很好的处理变量缺失的情况 解决: 我们把参数sex 手动清除 方法二: 实现功能的还有一种方法,就是模板字符串,但是教之format_map var 就low一些了,,也是没法处理变量缺失 ...
分类:
编程语言 时间:
2019-02-28 18:38:34
阅读次数:
317
虚拟机内存区常见名词: 栈帧(Frames): 栈帧是用来存储数据和部分结果,以及执行动态链接、方法返回值和异常信息的。 每次方法的调用都会生成一个栈帧,然后将该栈帧进行压栈。当方法结束后,该栈帧将会出栈、被销毁。 无论是正常结束还是异常结束。 每个栈帧都是自己的局部变量表、操作数栈、以及对当前方法 ...
分类:
编程语言 时间:
2019-02-22 00:34:37
阅读次数:
193
一个典型类的定义: Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。 栈的特点如下: 1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等) 2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息( ...
分类:
编程语言 时间:
2019-02-14 22:28:55
阅读次数:
184
1、学习目的 当需要排查各种内存溢出、 内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 Java内存运行时区域的各个部分,其中程序计数器、 虚拟机栈、 本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊 ...
分类:
编程语言 时间:
2019-02-01 10:13:45
阅读次数:
216
一.需要回收的内存区域 程序计数器、虚拟机栈、本地方法栈 3 个区域随线程生灭(因为是线程私有),栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。而 Java 堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处 ...
分类:
编程语言 时间:
2019-01-31 22:52:36
阅读次数:
237
1.所有对象和数组都是在堆里创建的 一个方法一个栈帧 int[ ] ages = new int[ ]{10,20,30}; 在堆中初始化数组 ,new(将10,20,30的内存地址赋值给了ages) System.out.println(ages); 【[I@15db9742】输出内存地址 jav ...
分类:
编程语言 时间:
2019-01-28 23:54:56
阅读次数:
363
Java程序中,每个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。 Stack Space用来做方法的递归调用时压入Stack Frame(栈 ...
分类:
其他好文 时间:
2019-01-15 17:47:58
阅读次数:
223