1.大致来说java虚拟机分为:堆  栈

栈在数据结构就是那个先进后出的栈。堆...这名字我一听就觉得大..毕竟我们形容东西多又没什么大多的组织的时候就是一堆一堆的....(原谅我发散性的思维,我是妹子...这样能理解我的思维么?)

栈是跟着线程走的。一个线程一个栈。一个方法一个栈帧(搞个这么专业的名字,其实就是一个方法的元数据包,比如记录了这个方法的名字,哪一行,参数,返回。。等等等,你就想象下,你是虚拟机,你要执行个方法你要写什么信息。。。)。栈的特点就是先进后出,正好跟方法的执行是匹配的,每只执行栈顶的方法,遇到方法中的方法就入栈再执行栈顶的方法,执行完了就出栈...匹配的完美。。。然后一个线程无非要做的就是读取指令执行指令然后读取下一个指令。。。咦,你咋知道下一个指令在哪里?如果是我我也会搞个东西记住我要执行的下一个指令在哪里啊。所有每个线程都有一个程序计数器指向下一行代码在哪里。严格来说,程序计数器跟栈没啥干系。。。又不需要先进后出的特点。。。。所以它既不是堆也不是栈,而且占的内存还小...没什么分量

栈还有特殊的东西,叫本地方法栈...干嘛的?名字都这么清楚了,执行本地方法的栈呗,啥叫本地方法?。。。。自己百度去。我只是个妹子又不是大牛。。。

还有一个大的东西,堆...就是一堆内存大家都能用。什么时候会用到呢?地方这么大那肯定是耗用内存比较多又不太能预计的就很好啦。相当于栈是自己家,装修要精致又整洁但是面积不大啊。那么分分钟要建个对象出来,占内存又大怎么办?放家太。。。挤了。那只能去外面了大家都能用的空地上了,然后栓根绳子在家了,方便后面能找到自己的对象。或者登记一下。有两种登记的方法,第一:堆里面有个区域专门登记地址。想当于一本的目录。有规律的记录了这一推内存的使用情况。需要找到某个对象的时候,从这个目录就就找到。。。而一个变量就在栈里面指向这个目录。。这个叫句柄。。。哎呀也就是指针的指针啦。。。还有一种就是建个对象丢堆里面,在栈里面弄个变量指向这个推里面的地址。就是引用,c叫指针(我更喜欢这个名字。。。很形象啊,一下就记住了。指向别人的一根针。。。。)这两种登记方式有什么区别呢?额,这个在垃圾回收的时候就有用啦。垃圾回收就是把没用的对象给清除了,不能占着茅坑不拉屎呀,对吧。怎么清除呢?好多办法。。。我记得有的就是把对象都搬到一起去。。然后空出一大片。。这个时候问题就来了,你把对象都搬家了。。。那我在栈里面的指针是不是也要变一下,指向新的地方。如果是第一种句柄的方式就不用,因为我指向的就只是个目录,,你家自己发生了变动关我啥事。。。你自己变变目录指向的值不就行了。。。第二种引用的方式就。。必须变了。谁叫我需要你呢,你走我也跟着走。。。。堆无非就是这么个东东。。。大家都能用的。。。仓库。。。。

内存还有几块。。。方法区  运行时常量  直接内存。。。总归都是有用的东西,但是我看了几遍也没啥影响,为什么?因为我感觉我没啥用啊。。。等我感觉我用的到了再说。。。

java虚拟机内存分析的更多相关文章

  1. Java面向对象内存分析

    title: Java面向对象内存分析 date: 2018-07-28 11:12:50 tags: JavaSE categories: - Java - JavaSE 一.Java虚拟机的内存区 ...

  2. 总结Java虚拟机内存区域模型

    本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...

  3. 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分

    一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...

  4. java虚拟机内存管理

    1. java虚拟机内存如下 2. 运行时数据区 内存图分析:

  5. 一文解析总结Java虚拟机内存区域模型

    最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...

  6. 深入剖析Java虚拟机内存结构

    深入剖析Java虚拟机内存模型 JVM整体架构 JVM整体架构如下: 通过编写代码来分析整个内存区域 public class Math { public static final Integer C ...

  7. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  8. 如何设置Java虚拟机内存以适应大程序的装载

    Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void ...

  9. 打包apk java 虚拟机内存不足

    解决方案:在android->sdk->build-tools-android-version 中有个 dx.bat dx.bat --dex 命令的dx.bat脚本有这样一句代码 REM ...

随机推荐

  1. poj A Round Peg in a Ground Hole

    http://poj.org/problem?id=1584 #include<cstdio> #include<cstring> #include<cmath> ...

  2. 哟西,CLOUDSTACK第一步,搞定

    安装了N十次,找个RESET SERVER的脚本.

  3. Android 介绍spydroid每个包的大体功能

    看了接近一周的spydroid源代码,对spydroid这个开源项目有了一定的认识.也许有些理解不一定正确,给后来者一点启示.也是自己对rtsp协议,rtp协议的总结. 在windows下,如果安装了 ...

  4. POJ1159 Palindrome(dp)

    题目链接. 分析: 感叹算法的力量. 方法一: 设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数. 那么如果 s[i] == s[j], dp[i][j] = dp[i+1] ...

  5. Codeforces Round #312 (Div. 2) A.Lala Land and Apple Trees

    Amr lives in Lala Land. Lala Land is a very beautiful country that is located on a coordinate line. ...

  6. sql server 修改字段大小

    alter table AAA ALTER COLUMN BBBvarchar(100);  这种语法只适合把字段往大了设置,  如果更新的字段大小比实际的要小时,并且数据库已存在比要更新的数据大时, ...

  7. <转>libjpeg解码内存中的jpeg数据

    转自http://my.unix-center.net/~Simon_fu/?p=565 熟悉libjpeg的朋友都知道libjpeg是一个开源的库.Linux和Android都是用libjpeg来 ...

  8. Java RMI 入门案例

    Java Remote Method Invocation(Java RMI) 是一个 Java API, 执行远程方法的调用,相当于 Remote Procedure Calls(RPC).Java ...

  9. 《Linear Algebra and Its Applications》-chaper2-矩阵代数中的基本性质

    之前我们曾经提及,完成了线性方程组-向量方程-矩阵方程的等价转化之后,我们对于现实问题中的线性方程组,只需将其转移到矩阵(向量)方程,然后利用矩阵代数中的各种方法和性质进行计算或者化简即可,而下面我们 ...

  10. NS CKD

    NS 定义:ALB<30:高脂血症:大量蛋白尿>3.5g:浮肿 见于:肾小球肾炎.小血管炎.微血管血栓性疾病.NSAIDs引起的急性间质性肾炎.不见于肾大血管病.间质性.小管性疾病. 并发 ...