CLR内存分配分三大块区域:栈、GC堆、大对象堆。一、线程堆栈(栈)用于分配值类型实例。栈由操作系统进行管理,不受GC管理,当值类型不在其作用域(主要是指其所在函数内)时,其所占栈空间自动释放。栈的执行效率是非常高的。二、GC堆(堆)用于分配小对象实例。所谓小对象就是大小小于85000字节的实例对象...
1.运行时错误,使用Checked块语句进行异常检查与抛出异常。2.值类型使用线程堆栈保存数据,数据大小大概为1M左右,引用类型使用托管堆保存数据,可以无限分配空间,因为有一个GC垃圾回收机制存在,注意结构类型和枚举类型都属于值类型。3.程序在使用常量时,实际不需要为常量分配内存,可以在程序集元数据...
1 内核线程
内核为每个线程分配8K的栈空间, 在每个堆栈的顶部放着struct thread_info 结构体,用来保存线程相关信息.
其中有几个重要变量:
Preempt_count :
此变量分为四部分
0-7bit :当前进程是否能抢占的标志
8-15bit:softirq 使能标志
16-23bit :hardirq 使能标志
24bit:PREEMPT_ACTIVE...
分类:
系统相关 时间:
2014-12-13 10:52:06
阅读次数:
485
当服务器挂起,崩溃或者性能底下时,就需要抓取服务器的线程堆栈(Thread Dump)用于后续的分析.Thread dump提供了当前活动的线程的快照. 它提供了JVM中所有Java线程的栈跟踪信息有很多方式可用于获取Thread Dump, 一些是操作系统特定的命令.操作系统命令获取ThreadD...
分类:
其他好文 时间:
2014-12-12 20:36:02
阅读次数:
169
1.进程组成 一个内核对象,操作系统用它来管理进程。 一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。此外,它还包含动态内存分配,比如线程堆栈和堆的分配。 2.一个进程可以有多个线程,所有线程都在进程的地址空间中“同时”执行代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。 ...
英文原文:JVM: How to analyze Thread Dump在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这...
分类:
编程语言 时间:
2014-11-10 19:51:31
阅读次数:
278
线程的基础知识 线程的组成。线程有两部分组成。 1、一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 2、另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环...
分类:
编程语言 时间:
2014-10-21 00:40:53
阅读次数:
415
这周有位新同事请我帮忙看一个关于信号处理的问题,程序希望在收到一个信号后退出,而他在信号处理方法里却做了很多事,包含释放一些全局内存等。这样问题就产生了,程序不定时的就挂死了,用gdb一看,全部的线程都挂在了pthread_once方法里,而似乎每一个线程都在处理信号,当中产生问题的线程堆栈例如以下...
分类:
其他好文 时间:
2014-10-17 13:30:13
阅读次数:
238
线程堆栈:简称栈 Stack 托管堆: 简称堆 Heap 使用.Net框架开发程序的时候,我们无需关心内存分配问题,因为有GC这个大管家给我们料理一切。如果我们写出如下两段代码: 代码段1: public?int?AddFive(int?p...
分类:
其他好文 时间:
2014-09-18 00:54:43
阅读次数:
435
hive mapreduce 都会转成java。所以要用的java分析工具。当看到map或reduce 阶段运行缓慢,我们去线上找到mapreduce的进程:
1. top 发现进程:
2. top -Hp 32486 找到进程中cpu或mem磁盘消耗最高的线程:
3. 用jstack主要用来查看某个Java进程内的线程堆栈信息:
bin/jstack -F 26510
...
分类:
其他好文 时间:
2014-08-19 19:14:35
阅读次数:
291