精华内容
下载资源
问答
  • Linux 查看jvm的内存

    2020-05-07 10:30:16
    JAVA进程内存 = JVM进程内存+heap内存+ 永久代内存+ 本地方法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存+元空间 linux内存和JAVA堆中关系 RES = JAVA正在存活内存对象大小 + 未回收对象大小 + 其它 ...

    1 linux下如何查看jvm的内存呢,通过top命令的Res看吗

    回到:不能,因为top命令下的Res包含

    JAVA进程内存 = JVM进程内存+heap内存+ 永久代内存+ 本地方法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存+元空间

    linux内存和JAVA堆中的关系

    RES = JAVA正在存活的内存对象大小 + 未回收的对象大小 + 其它

    VIART= JAVA中申请的内存大小,即 -Xmx -Xms + 其它

    其它 = 永久代内存+ 本地方法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存 +JVM进程内存

    2 linux如何查看jvm内存。

    通过top 命令下的mem%查看。

    或者是通过jmap -heap pid方式查看。

     

    展开全文
  • 如果系统开启了coredump,准确的说如果当前的shell环境开启了coredump,当前shell环境下的程序崩溃退出时,会把当时进程的栈内存状态写入core文件。使用gdb可以查看这个core文件中保存的栈的状态,gdb a.out core....

    最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何。

    如果系统开启了coredump,准确的说如果当前的shell环境开启了coredump,当前shell环境下的程序崩溃退出时,会把当时进程的栈的内存状态写入core文件。使用gdb可以查看这个core文件中保存的栈的状态,gdb a.out core。(关于coredump的开启和对shell的理解,请参考本人另一篇博客《使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析》,关于gdb请参考《gdb调试命令的使用及总结》)

    core文件生成的位置默认是可执行文件所在的位置,名称默认为core,其位置和名称是可以设置的,我的设置为:

    mkdir /home/corefile

    echo “/home/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

    这样,生成的core文件会放在/home/corefile目录下,core文件名会以core-%e-%p-%t的形式出现,其中%e表示可执行文件的名称,%p表示进程,%t表示生成core文件的时间(注意是unix时间)。

    下面是一个可以导致coredump的例程:

    5429daf149f95261555717cb771354ed.png

    划线处是会导致coredump处。执行后会在/home/corefile目录下产生以下文件:

    [root@localhostwin7]# ls /home/corefile/

    00c506a2c78b9c722291cb218c942e8f.png

    a.out是可执行文件名,5082是PID,1490760381是产生该文件的unix时间。把a.out 和core文件放在一个目录下,使用命令:

    gdb a.out core-a.out-5082-1490760381

    进入gdb,然后使用backtrace命令,即可看进程退出时的栈的内存状态,如下所示:

    375a9b32eb73a91e756a4f05810632d2.png

    可见,进程退出时,执行的最后一个函数是square函数。 ————————————————

    总结

    以上所述是小编给大家介绍的Linux下利用coredump技术追查进程崩溃原因,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

    展开全文
  • JVM内置检测工具: 一般使用如下几种: jps: 返回当前操作系统中所有JVM进程ID jps -l(输出包名....Java的内存模型主要定义JVM如何将变量存储到内存中,又如何内存变量取回等细节。 ...

    JVM内置的检测工具:

    一般使用如下几种:
    jps: 返回当前操作系统中的所有JVM进程ID jps -l(输出包名.类名)
    jmap:查看当前JVM的内存情况 jmap -heap PID(查看PID的JVM的堆情况)
    jstack :查看当前JVM的线程栈情况,常用于解决线程卡死问题

    Java内存模型

    Java的内存模型主要定义JVM如何将变量存储到内存中,又如何将内存中的变量取回等细节。
    此处的变量包括实例属性、静态属性以及数组元素但不包括局部变量和方法参数,因为后两者是线程私有的,不会被线程共享。

    Java内存模型规定了:

    1. 所有变量必须都存储在主内存中
    2. 每个线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。
    3. 线程对于变量的所有操作(读取、赋值等)必须在工作内存中进行,而不能直接操作主内存。不同线程之间也无法做到访问彼此的工作内存,变量之间的值传递均通过主内存来实现。

    Java内存模型的三大特性:
    并发程序同时满足以下三个特性才是线程安全的,任意一个不满足都不是线程安全。

    1. 原子性:
      即一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。基本数据类型的访问读写是具备原子性的。如若需要更大范围的原子性,需要synchronized约束。
    2. 可见性:
      可见性是指当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。volatile、synchronized、final三个关键字可以实现可见性。
      final:修饰的变量无法修改,所以其他线程看到的时候一定是最新的。
      synchronized:一个时刻只有一个线程能访问。
    3. 有序性 :
      如果在本线程内观察,所有的操作都是有序的;如果在线程中观察另外一个线程,所有的操作都是无序的。前半句是指"线程内表现为串行",后半句是指"指令重排序"和"工作内存与主内存同步延迟"现象。
      Java内存模型具备一些先天的“有序性”,即不需要通过任何手段就能够得到保证的有序性,这个通常也称为happens-before 原则。

    volatile变量的特殊规则:

    关键字volatile可以说是JVM提供的最轻量级的同步机制

    1. 保证此变量对所有线程的可见性,这里的"可见性"是指 : 当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。普通变量做不到这一点,普通变量的值在线程间传递均需要通过主内存来完成。例如:线 程A修改一个普通变量的值,然后向主内存进行回写,另外一条线程B在线程A回写完成之后再从主内存进行读取操作,新值才会对线程B可见。
    :由于volatile关键字只保证可见性,在不符合以下两条规则的运算场景中,我们仍然需要通过加锁(synchronized或者lock)来保证原子性。

    • 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值
    • 变量不需要与其他的状态变量共同参与不变约束

    因为Java里面的运算并非原子操作。
    以num++这句代码为例,在多线程的场景下,实际上num++等同于num = num+1。volatile关键字保证了num的值在取值时是正确的,但是在执行num+1的时候其他线程可能已经把num值增大了,这样在+1后会把较小的数值同步回主内存之中。

    2. 使用volatile变量的语义是禁止指令重排序。
    volatile关键字禁止指令重排序有两层意思:
    (1)当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行;
    (2)在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。
    普通的变量仅仅会保证在该方法的执行过程中所有依赖赋值结果的地方都能获取到正确的结果,而不能保证变量赋值操作的顺序和程序代码中执行的顺序一致。

    //x、y为非volatile变量
    //flag为volatile变量
    x = 2; //语句1 
    y = 0; //语句2 
    flag = true; //语句3 
    x = 4; //语句4 
    y = -1; //语句5
    

    由于flag变量为volatile变量,那么在进行指令重排序的过程的时候,不会将语句3放到
    语句1、语句2前面,也不会将语句3放到语句4、语句5后面。但是语句1和语句2的顺序、语句4和语句5的顺序是不作任何保证的。
    并且volatile关键字能保证,执行到语句3时,语句1和语句2必定是执行完毕了的,且语句1和语句2的执行结果对语句3、语句4、语句5是可见的。

    深浅拷贝

    展开全文
  • Java虚拟机

    2018-01-20 13:22:29
    这本书内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上评论全部为5星级好评,是整个Java图书领域公认经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版基础上做了很大...
  • 内存处理是编程人员容易出现问题地方,忘记或者错误的内存回收会导致程序或系统不稳定甚至崩溃,Java提供GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    学生提问:为什么有栈内存和堆内存之分? 93 4.6.2 基本类型数组初始化 95 4.6.3 引用类型数组初始化 96 4.6.4 没有多维数组 99 学生提问:我是否可以让图4.13中灰色覆盖数组元素再次指向另一个数组?这样...
  • Java开发技术大全(500个源代码).

    热门讨论 2012-12-02 19:55:48
    HelloWorldApp.java 第一个用Java开发应用程序。 firstApplet.java 第一个用Java开发Applet小程序。 firstApplet.htm 用来装载Applet网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
  • java 面试题 总结

    2009-09-16 08:45:34
    内存处理是编程人员容易出现问题地方,忘记或者错误的内存回收会导致程序或系统不稳定甚至崩溃,Java提供GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
  • java范例开发大全

    2013-03-08 20:06:54
    实例230 查看JVM中所有线程活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程同步与互斥 436 实例232 多线程同步方法实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我钱...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例154 使用静态成员变量计算内存中实例化对象数目 239  实例155 实现加减乘除方法 240  8.3 面向对象设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  ...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程的“空闲空间”。 malloc_init 将是初始化内存分配程序的函数。它要完成以下三件事:将分配程序标识为...
  • Java范例开发大全(全书源程序)

    热门讨论 2013-04-05 11:50:26
    实例230 查看JVM中所有线程活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程同步与互斥 436 实例232 多线程同步方法实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 ...
  • Java范例开发大全 (源程序)

    热门讨论 2011-04-27 07:47:22
     实例154 使用静态成员变量计算内存中实例化对象数目 239  实例155 实现加减乘除方法 240  8.3 面向对象设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158...
  • java范例开发大全(pdf&源码)

    热门讨论 2013-07-04 13:04:40
    实例230 查看JVM中所有线程活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程同步与互斥 436 实例232 多线程同步方法实例 436 实例233 ATM存取一体机(线程同步互斥) 437 实例234 我钱...
  • 4.4.2 什么情况下会发生栈内存溢出。 4.4.3 JVM内存结构,Eden和Survivor比例。 4.4.4 JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。 4.4.5 JVM中一次完整GC流程是怎样...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

java进程的栈内存如何查看

java 订阅