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 ...
随机推荐
- SCALA中类的继承
慢慢的,回想起以前学习JAVA和C#当中的的类的特性了. 感觉大同小异吧... package com.hengheng.scala class OOPInScala { } class Studen ...
- ISO 7810 协议小结
ISO 7816规定了Smart Card的传输协议分为 T=0 异步半双工字符传输协议 T=1 异步半双工块传输协议 T=0命令介绍 命令总是由接口设备启动,他以一个5字节的报头通知卡要做什么,然后 ...
- 教你如何用Qt做透明的窗体,setMask, Opacity
// In this function, we can get the height and width of the current widgetvoid Widget::resizeEvent(Q ...
- WebSocket 支持的浏览器
http://caniuse.com/#feat=websockets
- 【HDOJ】2424 Gary's Calculator
大数乘法加法,直接java A了. import java.util.Scanner; import java.math.BigInteger; public class Main { public ...
- 向Int数组插入随机1到100
这是一个经典的面试题,考察了几个知识点 下边的代码是传统经典的做法 ]; ArrayList myList=new ArrayList(); Random rnd=new Random(); ) { ...
- 【数学】【模拟】XMU 1044 伪伪随机数产生器
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1044 题目大意: 求首项为0,公比为x的等差数列组成的数字条的第y位数字是几.(x,y ...
- weblogic Connection has already been closed解决方法
今天正式环境下的有一个功能报错,看了下weblogic日志,报连接已经关闭. com.ibatis.common.jdbc.exception.NestedSQLException: --- The ...
- Jenkins 初见
在网上貌似没有找到Jenkins的中文的太多的文档,有的都是关于Hudson的一些 零零散散的,所以自己边学习边实践总结了以下系列文章,希望有助于大家对于Jenkins的使用. 本系列文章是基于我3年 ...
- eclipse快捷键总结
一.自定义快捷键 Window->Preferences->General->keys,进入快捷键管理界面,可以修改默认功能的快捷键组合例:修改以下快捷键功能(快捷键组合尽量保持唯一 ...