内存分析

简介: 内存分析 java

内存分析

内存分析:

      分析的是 jvm 的内存;

     

      jvm是虚拟机,是一台可以执行字节码文件的虚拟的机器;

      jvm的资源是来自本地的硬件;

 

      jvm默认是 64m 内存;

      命令行参数;

      简而言之:分析的是 jvm 的 内存,内存来自于本地;

 

 

jvm 内存分析:

      内存是抽象的

      虚拟机的内存,在逻辑上主要被划分为 5个部分

 

      栈

      堆

      方法区

      本地方法栈

      程序计数器

 

5个部分分别介绍

 

栈:

      每个线程都包含一个栈,多个线程就是有多个栈。多个栈之间的信息并不互通;

      栈的空间相对于堆较小,运行速度要快;

      程序执行到方法时,先把方法压入栈,还会储存局部变量。

      方法执行完毕之后,就会回收空间。这是栈自行的清理空间,而不是 垃圾回收机制;

      栈是内存中一块连续的区域;

 

堆:

      堆只有一个,被所有线程共享。

      堆的空间大,运行速度慢。堆不是连续区域;

      堆主要存放对象,基本上所有对象都存储在堆里,new产生的对象肯定在堆里;

      堆的内存回收和栈不同,垃圾回收机制主要的回收的是堆中的垃圾;

 

      垃圾:指的是 无用的对象;

      当堆中的对象,没有任何一个地址可以指向它的时候,他就是不可达的对象,就是垃圾;

 

      判断对象是否可达,用的是科学分析法;

 

      java项目一经启动,就会自动的开启 关于垃圾回收的线程,该线程是后台线程;

 

      垃圾回收器 简称 GC

      程序员不可以命令 GC去回收垃圾,但是可以通知GC,但是GC不一定执行;

 

 

方法区:

      目前方法区的认识分为两种:

      1.    方法区不是堆的一部分;

      2.    方法区属于堆的一部分;

 

      方法区主要包含三个部分:

             1.    存放信息的部分:存放字节码信息;

             2.    静态区:存放静态元素的地方;

             3.    常量池:存放常量,不是任何一个累都支持常量池技术;

                                  String、包装类中的一部分;

                                  目的:   减少对象的创建;

                                  原理:   例如String

                    当我们创建 String str = “你好”; 时 会首先到常量池中寻找;

                    如果有“你好”这个字符串,那么就把地址给到 str

                    如果没有这个字符创,那么就在常量池创建这个字符串对象,把地址给到str

                    当我们需要创建100个“你好”时,其实只创建了一个;

                    普通对象不可以放到常量池中;

1.  show(){    

2.      Person p = new Person();  //新建立的对象是垃圾;

3.      p.add();  

4.  }  

5.    

6.  pss = {};  

7.  show(Person [] ps){  

8.      Person p = new Person();  //新建立的对象不是垃圾

9.      p.add();  

10.    ps[0]=p;  

11. }  

 

本地方法栈:

      专门为本地方法服务;

 

 

程序计数器:

      为线程之间跳转服务;

 

相关文章
|
10天前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
27 2
|
10天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
22 1
|
12天前
|
存储 Prometheus NoSQL
Redis 内存突增时,如何定量分析其内存使用情况
【9月更文挑战第21天】当Redis内存突增时,可采用多种方法分析内存使用情况:1)使用`INFO memory`命令查看详细内存信息;2)借助`redis-cli --bigkeys`和RMA工具定位大键;3)利用Prometheus和Grafana监控内存变化;4)优化数据类型和存储结构;5)检查并调整内存碎片率。通过这些方法,可有效定位并解决内存问题,保障Redis稳定运行。
|
28天前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
1月前
|
NoSQL 程序员 Linux
轻踩一下就崩溃吗——踩内存案例分析
踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it's a feature, not a bug)触发的踩内存案例。
|
2月前
|
Python
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
18 2
|
2月前
|
NoSQL Java 测试技术
Golang内存分析工具gctrace和pprof实战
文章详细介绍了Golang的两个内存分析工具gctrace和pprof的使用方法,通过实例分析展示了如何通过gctrace跟踪GC的不同阶段耗时与内存量对比,以及如何使用pprof进行内存分析和调优。
55 0
Golang内存分析工具gctrace和pprof实战
|
1月前
使用qemu来dump虚拟机的内存,然后用crash来分析
使用qemu来dump虚拟机的内存,然后用crash来分析
|
3月前
|
Java
jmap 查看jvm内存大小并进行dump文件内存分析
jmap 查看jvm内存大小并进行dump文件内存分析
57 3

热门文章

最新文章

下一篇
无影云桌面