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. OSSEC

    [科普]入侵检测系统ossec配置文件详解 http://www.freebuf.com/articles/system/11862.html http://www.freebuf.com/autho ...

  2. java四种创建对象的方法

    1.用new语句创建对象,这是最常见的创建对象的方法.   2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance ...

  3. Android AlarmManager实现不间断轮询服务

    在消息的获取上是选择 轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如 更新检查,可能是半个小时或一个小 ...

  4. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...

  5. CSS3学习笔记(新属性)

    1. 边框(圆角边框.加阴影和用图片绘制) 新增加 border-radius  box-shadow  border-image .div1{ border:2px solid purple; bo ...

  6. Oracle function注释

    create or replace function fn_bookid_get_by_chapterid(inintChapterId in integer, outvarBookId out va ...

  7. win7怎么安装消息队列 MSMQ

    win7般都默认装了消息队列只需要进入 控制面板-程序-程序和功能-已安装更新-打开或关闭windows功能 勾选 Microsoft Message Queue (MSMQ)服务器 启动服务 行了: ...

  8. HPROF学习

    抓取HPROF log 1. GUI 可以通过 adt-bundle-windows-x86_64-20140702\sdk\tools\monitor.bat来抓取. 打开软件,选中相应的包,比如“ ...

  9. F - True Liars - poj1417(背包+并查集)

    题意:有这么一群人,一群好人,和一群坏人,好人永远会说实话,坏人永远说假话,现在给你一组对话和好人与坏人的数目P1, P2. 数据里面的no是A说B是坏人, yes代表A说B是好人,就是这样,问题能不 ...

  10. motan源码分析四:客户端调用服务

    在第一章中,我们分析了服务的发布与注册,本章中将简单的分析一下客户端调用服务的代码及流程,本文将以spring加载的方式进行分析. 1.在DemoRpcClient类的main()方法中加载类: Ap ...