展开

关键词

windows研究以及线安全

由于hook时要线安全,考虑每条线放对应的数据,于是找了一下网上的说法是默认2M,实际情况却不是这样的。在win10下,使用gcc,vc++,delphi,3种编译器默认编译进行了测试。 真实大小是1A0000-A3000=FD000(1,036,288) 大约1M,这是满了重新分配后的大小,必须跨越才会重新分配,我想这部分应该在内核,暂时还没研究。 500000-403000=FD000)就可以停止了,之后你就可以使用1M的了。 说一下顶,跨越顶没有问题,但是操作系统并不会更改TEB中的数据,所以这种做法无法增加大小。 再说一下线安全,直接在中分配的局部变量当然是安全的,但是指针不安全,如果每条线分配一个对象,这种面向对象也是安全的,全局变量是不安全的,而不同线使用同一个对象也是不安全的。

19720

Linux 中的各种:进 线 内核 中断

CC++ 编译器始终将 sp 用作指针lr (r14) 用于存储调用子例时的返回地址。 二、线Linux 内核的角度来说,其实它并没有线的概念。Linux 把所有线都当做进来实现,它将线和进不加区分的统一到了 task_struct 中。 线仅仅被视为一个与其他进共享某些资源的进,而是否共享地址空间几乎是进Linux 中所谓线的唯一区别。 对于 Linux或者说主线,其 stack 是在 fork 的时候生成的,实际上就是复制了父亲的 stack 空间地址,然后写时拷贝 (cow) 以及动态增长。 这些都不重要,重要的是,线不能动态增长,一旦用尽就没了,这是和生成进的 fork 不同的地方。由于线是从进的地址空间中 map 出来的一块内存区域,原则上是线私有的。

22620
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 中的各种:进 线 内核 中断

    CC++ 编译器始终将 sp 用作指针lr (r14) 用于存储调用子例时的返回地址。 二、线Linux 内核的角度来说,其实它并没有线的概念。Linux 把所有线都当做进来实现,它将线和进不加区分的统一到了 task_struct 中。 线仅仅被视为一个与其他进共享某些资源的进,而是否共享地址空间几乎是进Linux 中所谓线的唯一区别。 对于 Linux或者说主线,其 stack 是在 fork 的时候生成的,实际上就是复制了父亲的 stack 空间地址,然后写时拷贝 (cow) 以及动态增长。 这些都不重要,重要的是,线不能动态增长,一旦用尽就没了,这是和生成进的 fork 不同的地方。由于线是从进的地址空间中 map 出来的一块内存区域,原则上是线私有的。

    12650

    关于Signal Catcher线中对线的理解

    等到线都挂起后,开始遍历Dump每个线线数据后再唤醒线。关于ANR的更多内容在我的其他博客中进行查阅~~.本文重点讲的是在分析Singal Catcher时对线有了更新的了解。 帧,JNI函数指针列表等等,之所以说是Java线状态,Java帧,是因为Android运行时其实是没有自己单独的线机制的,Java线底层都是一个Linux线,但是Linux线是没有像Watting ,Blocked等状态的,并且Linux线也是没有Java的,那么这些线状态和Java帧必须有一个地方保存,要不然就丢失了,Thread对象就是一个很理想的“储物柜”。 只有当创建出来的Thread对象执行了attach函数后,一个Linux线在真正和虚拟机运行时关联起来,才变成了Java线,才有了自己的java线状态和java帧等数据结构,那些纯粹的native 是不能执行java代码的,所以当系统发生crash或者anr进行dump进的时候,有些线是没有java的,只有native和kernel,就是这个原因。

    9840

    分享一款JVM线线分析工具

    相信即使工作3-5年的序员可能也不大了解。 ? 如题所述,今天与大家分享的是如何分析JVM的线以及如何从信息中找出问题。 线分析尽管不是初学者一门必备的技术,但是对于自身走向高来说应该是必备的傍身技能。哎...内存又溢出了,唉...? 怎么突然CPU200%了等等一系列的问题都需要从线中存储的信息找到问题所在。JVM 线首先我们了解一下JVM 线——它是什么? – Java线跟踪;这是目前为止你能从线中找到的最重要的数据. 问题描述linux系统下,线上环境Tomcat进CPU突然飙升到200%问题解决查找对应Tomcat进号ps -ef|grep tomcat8_itstyle导出信息,查询进PID为8564jstack

    11.4K80

    分享一款JVM线线分析工具

    相信即使工作3-5年的序员可能也不大了解。如题所述,今天与大家分享的是如何分析JVM的线以及如何从信息中找出问题。 线分析尽管不是初学者一门必备的技术,但是对于自身走向高来说应该是必备的傍身技能。哎...内存又溢出了,唉...? 怎么突然CPU200%了等等一系列的问题都需要从线中存储的信息找到问题所在。JVM 线首先我们了解一下JVM 线——它是什么? – Java线跟踪;这是目前为止你能从线中找到的最重要的数据. 问题描述linux系统下,线上环境Tomcat进CPU突然飙升到200%问题解决查找对应Tomcat进号ps -ef|grep tomcat8_itstyle导出信息,查询进PID为8564jstack

    40120

    对Java Stack的一次探索

    Java 线直接map的 OS 的 native thread , 因此Linux线的限制也就限制了 Java 可以创建的线Linux 对系统能创建的总的线数和每个用户能够创建的线数都是有限制的。 ,这句话应该是不对的,Xss 限制的就是线的最大值。因此接下来就是这个大小是动态扩展的还是线创建时就直接分配好的呢? 由于java的大对象都分配在上,因此没什么好办法耗尽内存,但可以看出在初始化时是很小的,更大的影响因素还是Linux线数限制。 结论:Java 线创建取决于操作系统限制(pid_max, max_map_count, memory等)stack 的帧是动态分配的,-Xss 限制最大值-Xmx -Xms 限制大小,与共用内存

    62830

    《Android 创建线源码与OOM分析》

    ----有两种:出现次数最多的一种,称之为 A。 child_jni_env_ext.get() == nullptr 对应的是Bpthread_create 调用失败对应的是A所以这里我们可以得出B发生的原因:JNIEnvExt::Create attr: 指定了新线的一些属性,其中包括大小。Thread::CreateCallback: 新创建的线的routine函数,即,线的入口函数。 在pthread的实现中,mmap分配的内存赋值给了stack_base,stack_base不光是线执行的,其中还存储了线的其他信息(如线名,ThreadLocal变量等),这些信息定义在pthread_internal_t 最终得出一个结论,不管是A,还是B:创建线中发生OOM是因为进内的虚拟内存地址空间耗尽了。所以,什么情况下虚拟内存地址空间才会耗尽呢?我们先研究一下linux的虚拟内存怎么布局的。

    3K90

    JVM和Linux内存的关系--进与JVM内存空间

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:Linux保留大约200m,这部分是Linux正常运行的需要,Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,Java NIO buffer 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    13320

    解Bug之路-记一次JVM外内存泄露Bug的查找 顶

    发现内存计算对不上由于我们这边设置的Xss是512K,即一个线大小是512K,而由于线共享其它MM单元(线本地内存是是现在线上的),所以实际线外内存占用数量也是512K。 如下所示:Java线底层实现JVM的线linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线就对应linux的lwp(轻量级进,也是进 其中,我们在JVM启动时候设置了-Xss=512K(即线大小),这512K中然后有8K是必须使用的,这8K是由进的内核和thread_info公用的,放在两块连续的物理页框上。如下图所示: ? 挑出符合条件(即size是504K)的几十组看了下,基本都在92K-152K之间,再加上内核8K(92+152)2+8K=130K,由于是估算,取整为128K,即反映此应用平均线大小。 12563个线,每个线平均大小128K,即:128K * 12563=1570M=1.5G的对外内存取个整数128K,就能反映出平均水平。

    30940

    Linux与JVM的内存关系分析(文末送书)

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。 1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:Linux保留大约200m,这部分是Linux正常运行的需要,Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,Java NIO buffer 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    27910

    JVM 与 Linux 的内存关系详解

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:Linux保留大约200m,这部分是Linux正常运行的需要,Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,Java NIO buffer 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    61000

    Linux与JVM的内存关系分析

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定。 现在分析这600m内存的分配情况:(1)Linux保留大约200m,这部分是Linux正常运行的需要,(2)Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,(3)Java 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:(1)在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    2.3K80

    JVM 与 Linux 的内存关系详解

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。 1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:Linux保留大约200m,这部分是Linux正常运行的需要,Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,Java NIO buffer 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    48150

    看完这篇文章你还敢说你懂JVM吗?

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。用户内存 上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:(1)Linux保留大约200m,这部分是Linux正常运行的需要,(2)Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,(3)Java 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:(1)在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    39420

    看完这篇文章你还敢说你懂JVM吗?

    下面从用户内存和内核内存两个方面讲解JVM进的内存特点。1.用户内存上图特别强调了JVM进模型的代码区和数据区指的是JVM自身的,而非Java序的。普通进区,在JVM一般仅仅用做线。 对于普通进来说,这个区域被可用于空间的申请及释放,每次内存分配都会使用这个区 域,因此大小变动频繁;对于JVM进来说,调整大小及线时会使用该区域,而大小一般较少调整,因此大小相对稳定 现在分析这600m内存的分配情况:(1)Linux保留大约200m,这部分是Linux正常运行的需要,(2)Java服务的线数量是160个,JVM默认的线大小是1m,因此使用160m内存,(3)Java 因此,我们得出一个结论:部署Java服务的Linux系统,在内存分配上,需要避免SWAP的使用;具体如何分配需要综合考虑不同场景下JVM对Java永久代 、Java(新生代和老年代)、线、Java 分析这个问题如下:(1)在这个场景中, Java永久代 、Java(新生代和老年代)、线所用内存基本是固定的,因此,占用内存过多的原因就定位在Java NIO上。

    32910

    解Bug之路-记一次JVM外内存泄露Bug的查找

    发现内存计算对不上由于我们这边设置的Xss是512K,即一个线大小是512K,而由于线共享其它MM单元(线本地内存是是现在线上的),所以实际线外内存占用数量也是512K。 如下所示:Java线底层实现JVM的线linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线就对应linux的lwp(轻量级进,也是进 其中,我们在JVM启动时候设置了-Xss=512K(即线大小),这512K中然后有8K是必须使用的,这8K是由进的内核和thread_info公用的,放在两块连续的物理页框上。如下图所示: ? 挑出符合条件(即size是504K)的几十组看了下,基本都在92K-152K之间,再加上内核8K(92+152)2+8K=130K,由于是估算,取整为128K,即反映此应用平均线大小。 12563个线,每个线平均大小128K,即:128K * 12563=1570M=1.5G的对外内存取个整数128K,就能反映出平均水平。

    33330

    今咱们来聊聊JVM 外内存泄露的BUG是如何查找的前言内存泄露Bug现场查找线索总结

    发现内存计算对不上由于我们这边设置的Xss是512K,即一个线大小是512K,而由于线共享其它MM单元(线本地内存是是现在线上的),所以实际线外内存占用数量也是512K。 如下所示:Java线底层实现JVM的线linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线就对应linux的lwp(轻量级进,也是进 其中,我们在JVM启动时候设置了-Xss=512K(即线大小),这512K中然后有8K是必须使用的,这8K是由进的内核和thread_info公用的,放在两块连续的物理页框上。如下图所示:? 挑出符合条件(即size是504K)的几十组看了下,基本都在92K-152K之间,再加上内核8K(92+152)2+8K=130K,由于是估算,取整为128K,即反映此应用平均线大小。 12563个线,每个线平均大小128K,即:128K * 12563=1570M=1.5G的对外内存取个整数128K,就能反映出平均水平。

    90540

    今咱们来聊聊JVM 外内存泄露的BUG是如何查找的

    发现内存计算对不上由于我们这边设置的Xss是512K,即一个线大小是512K,而由于线共享其它MM单元(线本地内存是是现在线上的),所以实际线外内存占用数量也是512K。 如下所示:Java线底层实现JVM的线linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线就对应linux的lwp(轻量级进,也是进 其中,我们在JVM启动时候设置了-Xss=512K(即线大小),这512K中然后有8K是必须使用的,这8K是由进的内核和thread_info公用的,放在两块连续的物理页框上。 如下图所示:众所周知,一个进(包括lwp)包括内核和用户,内核+thread_info用了8K,那么用户态的可用内存就是:512K-8K=504K如下图所示:Linux实际物理内存映射事实上linux 12563个线,每个线平均大小128K,即:128K * 12563=1570M=1.5G的对外内存取个整数128K,就能反映出平均水平。

    5.7K170

    解Bug之路-记一次JVM外内存泄露Bug的查找

    发现内存计算对不上由于我们这边设置的Xss是512K,即一个线大小是512K,而由于线共享其它MM单元(线本地内存是是现在线上的),所以实际线外内存占用数量也是512K。 如下所示:Java线底层实现JVM的线linux上底层是调用NPTL(Native Posix Thread Library)来创建的,一个JVM线就对应linux的lwp(轻量级进,也是进 其中,我们在JVM启动时候设置了-Xss=512K(即线大小),这512K中然后有8K是必须使用的,这8K是由进的内核和thread_info公用的,放在两块连续的物理页框上。 如下图所示: 众所周知,一个进(包括lwp)包括内核和用户,内核+thread_info用了8K,那么用户态的可用内存就是:512K-8K=504K如下图所示: Linux实际物理内存映射事实上 12563个线,每个线平均大小128K,即:128K * 12563=1570M=1.5G的对外内存取个整数128K,就能反映出平均水平。

    11830

    相关产品

    • TencentOS Server

      TencentOS Server

      腾讯服务器操作系统(TencentOS Server,TS)是腾讯云推出的Linux操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云CVM全规格实例上,包括黑石2.0服务器。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券