java虚拟机内存分析
1.大致来说java虚拟机分为:堆 栈
栈在数据结构就是那个先进后出的栈。堆...这名字我一听就觉得大..毕竟我们形容东西多又没什么大多的组织的时候就是一堆一堆的....(原谅我发散性的思维,我是妹子...这样能理解我的思维么?)
栈是跟着线程走的。一个线程一个栈。一个方法一个栈帧(搞个这么专业的名字,其实就是一个方法的元数据包,比如记录了这个方法的名字,哪一行,参数,返回。。等等等,你就想象下,你是虚拟机,你要执行个方法你要写什么信息。。。)。栈的特点就是先进后出,正好跟方法的执行是匹配的,每只执行栈顶的方法,遇到方法中的方法就入栈再执行栈顶的方法,执行完了就出栈...匹配的完美。。。然后一个线程无非要做的就是读取指令执行指令然后读取下一个指令。。。咦,你咋知道下一个指令在哪里?如果是我我也会搞个东西记住我要执行的下一个指令在哪里啊。所有每个线程都有一个程序计数器指向下一行代码在哪里。严格来说,程序计数器跟栈没啥干系。。。又不需要先进后出的特点。。。。所以它既不是堆也不是栈,而且占的内存还小...没什么分量
栈还有特殊的东西,叫本地方法栈...干嘛的?名字都这么清楚了,执行本地方法的栈呗,啥叫本地方法?。。。。自己百度去。我只是个妹子又不是大牛。。。
还有一个大的东西,堆...就是一堆内存大家都能用。什么时候会用到呢?地方这么大那肯定是耗用内存比较多又不太能预计的就很好啦。相当于栈是自己家,装修要精致又整洁但是面积不大啊。那么分分钟要建个对象出来,占内存又大怎么办?放家太。。。挤了。那只能去外面了大家都能用的空地上了,然后栓根绳子在家了,方便后面能找到自己的对象。或者登记一下。有两种登记的方法,第一:堆里面有个区域专门登记地址。想当于一本的目录。有规律的记录了这一推内存的使用情况。需要找到某个对象的时候,从这个目录就就找到。。。而一个变量就在栈里面指向这个目录。。这个叫句柄。。。哎呀也就是指针的指针啦。。。还有一种就是建个对象丢堆里面,在栈里面弄个变量指向这个推里面的地址。就是引用,c叫指针(我更喜欢这个名字。。。很形象啊,一下就记住了。指向别人的一根针。。。。)这两种登记方式有什么区别呢?额,这个在垃圾回收的时候就有用啦。垃圾回收就是把没用的对象给清除了,不能占着茅坑不拉屎呀,对吧。怎么清除呢?好多办法。。。我记得有的就是把对象都搬到一起去。。然后空出一大片。。这个时候问题就来了,你把对象都搬家了。。。那我在栈里面的指针是不是也要变一下,指向新的地方。如果是第一种句柄的方式就不用,因为我指向的就只是个目录,,你家自己发生了变动关我啥事。。。你自己变变目录指向的值不就行了。。。第二种引用的方式就。。必须变了。谁叫我需要你呢,你走我也跟着走。。。。堆无非就是这么个东东。。。大家都能用的。。。仓库。。。。
内存还有几块。。。方法区 运行时常量 直接内存。。。总归都是有用的东西,但是我看了几遍也没啥影响,为什么?因为我感觉我没啥用啊。。。等我感觉我用的到了再说。。。
java虚拟机内存分析的更多相关文章
- Java面向对象内存分析
title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...
- 总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
- java虚拟机内存管理
1. java虚拟机内存如下 2. 运行时数据区 内存图分析:
- 一文解析总结Java虚拟机内存区域模型
最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...
- 深入剖析Java虚拟机内存结构
深入剖析Java虚拟机内存模型 JVM整体架构 JVM整体架构如下: 通过编写代码来分析整个内存区域 public class Math { public static final Integer C ...
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- 如何设置Java虚拟机内存以适应大程序的装载
Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void ...
- 打包apk java 虚拟机内存不足
解决方案:在android->sdk->build-tools-android-version 中有个 dx.bat dx.bat --dex 命令的dx.bat脚本有这样一句代码 REM ...
随机推荐
- 调用系统API还是很高效的,不必担心性能
代码如下: void MainWindow::on_pushButton_2_clicked() { QTime total; total.start(); ; ; i<=*; i++) { Q ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- oracle索引总结
简介 1.说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信 ...
- 用SQL替换最后一个指定字符后面的所有字符
下面给出任意字符串,该字符串长度未定,只知道该字符串有许多个‘-’连接起来的,现在要把最后一个‘-’后面的字符替换掉为指定串. 假如字符串为:'x1253-axebx-xcdx-o9kgl-3ddll ...
- Symmetric Tree——LeetCode
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- apache 创建虚拟目录
<VirtualHost *:83> DocumentRoot "E:\PhpProjects"</VirtualHost><Directory ...
- hdu4746:2013杭州网络赛I 莫比乌斯反演
题意: 有5000组询问,每组询问求有多少i,j满足i∈[1,n],j∈[1,m]且gcd(i,j)的质因子数目<=p. n,m<=500000 思路: 首先预处理出每个数的质因子数目分别 ...
- linux系统资源信息监控
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...
- mount 远程挂载Nfs
服务器:192.168.20.204 客户端:192.168.20.203 1. 在服务器配置/etc/export 添加可以共享的文件夹和允许的客户端地址 /home/dir 192.168.20. ...
- 二、Linux文件系统之内存管理
虚拟内存 32位:4G 64位:2^64 内存管理: 进程管理 自动分配和管理 支持模块化程序设计 保护和访问控制 长期存储 虚拟内存 <---MMU-->物理内存