码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2020-05-19 18:24:01      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:重要   内存   性能   私有   jdk   file   sys   com   堆内存   

去分析多线程就要分析线程栈。

先了解一下java虚拟机的结构:

技术图片

Class file是类文件。写完程序后源码扩展名.java,源码是不能被运行的,需要做编译,编译的命令叫javac。编译后class文件,首先会调用一个系统,叫Classloader sub-system.

jdk目录下有一个javac,这是java的编译器。他会把一个源文件,编译为class。Class文件不能被直接执行,所以要装个java虚拟机。

 技术图片

Classloader sub-system.:类装载子系统,就是把磁盘上放的文件装载到Java虚拟机里。放到一大块内存空间里。专门给Java专用的。这是从操作系统的物理空间上挖出来的一大块,为了高效利用这块内存,又把这块内存分成了一片一片。方法、堆、栈、计数器、本地栈。Java内存专用区域。

做性能分析最重要的两点是堆内存、栈内存。栈里放线程信息,如线程执行状态、轨迹,栈里分的小但线程是私有的。

如下图有两块内存空间。右侧是堆,开启一个线程,就会在左侧开启一个空间来存这个信息。,左侧存一个线程的空间就叫栈。

 技术图片

有多少个线程就有多少个栈。栈是私有的,一个线程有一个自己的栈。分析栈的空间里的内容,其实就是分析线程。线程的状态输出来叫线程Dump(线程的快照)。

这么多线程产生的对象往堆里放。堆是共享的。所有线程产生的对象都在堆里。

在执行new的时候,产生的对象都会放到堆里去。栈里存放的东西不是固定的。int类型,如果有一个int a=10.,这个10应该放到栈里边。基本数据类型是放到栈里。对象一定是放到堆里。内存泄漏是在堆里的内存泄漏。就是分析堆里对象的使用。就是用完了没释放掉就是一次泄漏。

如果想看代码的执行过程、轨迹是在栈里体现。内存分析右边。cpu分析左边。

下图:所有的线程都共享这个heap,这叫堆。左边是一个线程栈,他们产生的对象全在这里面。

 技术图片

 

 

多线程

标签:重要   内存   性能   私有   jdk   file   sys   com   堆内存   

原文地址:https://www.cnblogs.com/fanf/p/12918407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!