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 ...
随机推荐
- [Android] 混音器AudioMixer
AudioMixer是Android的混音器,通过混音器可以把各个音轨的音频数据混合在一起,然后输出到音频设备. 创建AudioMixer AudioMixer在MixerThread的构造函数内创建 ...
- ldd显示可执行模块的dependenc
ldd的作用是打印可执行档依赖的共享库文件.它是glibc的一部分,由Roland McGrath和Ulrich Drepper维护:$ ldd --versionldd (GNU libc) 2.9 ...
- linux浏览器,邮件客户端,输入法,双屏设置,应用软件,scrot -s截图,office
搜狗输入法linux版:http://pinyin.sogou.com/linux/help.php win/linux同时支持比较好用的浏览器:maxthon,firefox,maxthon,ope ...
- COJ 0580 4021征兵方案
4021征兵方案 难度级别: C: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 现在需要征募女兵N人,男兵M人,每征募一个人 ...
- [Design Pattern] Service Locator Pattern 简单案例
Service Locator Pattern,即服务定位模式,用于定位不同的服务.考虑到 InitialContext::lookup 的成本比较高,提供了 Cache 类缓存以定位到的服务. 代码 ...
- C++編程札記「基礎」
一直以為自己最擅長的編程語言是C++,那時自己的水平停留在使用C++來實現數據結構中的各種ADT和ACM算法. 創建一個類,必須實現的成員函數 explicit構造函數 對於單參數構造函數,添加exp ...
- HTTP学习笔记3-响应结构
HTTP响应: 13,在接收和解释请求消息后,服务器会返回一个HTTP响应消息. 14,与HTTP请求类似,HTTP响应也是由三个部分组成,分别是:状态行.消息报头.响应正文. 15,状态行由协议版本 ...
- [原创小知识] 如何优雅的判断 ie 版本
之前一直不怎么做低版本ie的前端,毕竟ie的大半江山都被chrome 霸占,但大部分情况下,却还是要去兼容下那些老顽固.一切的原因,都是因为当年微软的年轻气盛,喜欢另起炉灶,真是很无语. 通常我们去h ...
- jsp if else c标签 总结
JSTL标签使用方法 keyword:JSTL标签.<c:choose>.<c:forEach>.<c:forTokens>.<c:if>.<c: ...
- Chapter 2. Overview gradle概览
2.1. Features //gradle特性 Here is a list of some of Gradle's features. Declarative builds and build-b ...