栈管运行,堆管存储!!!

  栈呢,也叫作栈内存,主要管java程序的运行,在线程创建时创建,生命周期和线程一致,只要线程一结束,该栈就被GC,是线程私有的。基本类型的变量和对象的引用数据类型的变量都在栈内存中调用。

栈存储什么?

  大体可以分为3类:

    1.本地变量:输入参数和输出参数以及方法付内的变量

    2.栈操作:记录入栈、出栈的操作

    3.栈帧数据:包括类文件、方法等等

栈运行原理

  栈中的数据都是以栈帧的格式存在,当存储一个数据时,产生一个栈帧F1,并且被压入了栈中;其实再存入数据时,会再产生一个栈帧F2,也被压入了栈中。。。。。执行完毕时,后被压入栈中的数据会先被弹出,符合“先进后出,后进先出”原则。

静态方法存储在方法区,跑到栈区,只是在运行时,临时跑过去,类似于你请人来家里帮忙,但是这个人并不是你家里的人。

jvm优化主要是共享的数据区即方法区和堆中。

JVM分类

  Sun公司的Hotpot(平时最常用)

  BEA公司的JRockit

  IBM公司的J9 VM

BEA公司最有名的产品是WebLogic, Web服务器,比tomcat性能高很多倍!

 

伊甸区(占内存的约80%):

      程序运行时,所有的数据,当达到70%时,程序会运行GC垃圾回收机制,其实没有被调用的数据就会被回收,若是被调用则会存储到幸存者0区。

幸存者0区(占内存的约10%):

      在伊甸区中,没有被GC回收的数据会被保存在这里。

幸存者1区(占内存的约10%):

      经过伊甸区和幸存者0区再次回收时,未被回收时,如果0区满了,则存放在这里。

养老区:

      如果数据在幸存者1区也满了的话,则会放到养老区。如果养老区也存放满了,则会报程序溢出异常。一般池对象在这个区域活跃。养老区的对象一般是活过15次以上的(jdk1.6之前),现在可以随意修改参数,最多不可以超过31次

一般来说,虚拟机的内存只能达到内存的1/4

  可是使用: Runtime.getRuntime().maxMemory()/1024/1024 得到最大的内存

  养老区的对象 调优:过大的jvm 内存的开销,而且对象的大量存活,不一定就会进入老年区;因为我们可以设置survivor和Eden的大小;以及可以设置threshold的值。threshold设置高一点(比如30),然后Eden设置8G,survivor设置500M.

永久存储区:

  是一个常驻内存区域,存放的都是运行时,所需要的jar包,例如:Tomcat运行时,必须要jre中的jar包。用于存放元数据,并不会被垃圾回收机制回收,当程序结束运行时,关闭虚拟机才会释放。

常量池:

   存放的是一些常量,不可改变的数据。例如 String a = "hello" hello就放在常量池中。

      

关于Jvm的见解(二)的更多相关文章

  1. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  2. JVM 系列(二)内存模型

    02 JVM 系列(二)内存模型 一.JVM 内存区域 JVM 会将 Java 进程所管理的内存划分为若干不同的数据区域.这些区域有各自的用途.创建/销毁时间: 一. 线程私有区域 线程私有数据区域生 ...

  3. JVM学习总结二——垃圾回收算法

    昨天总结了JVM内存分区相关的知识,这次我们将来了解下JVM的另一个核心知识点——垃圾回收算法.这一部分其实并不太难,如果对操作系统的内存处理算法有所了解,那么这部分算法其实只看名字就能明白,两者在原 ...

  4. JVM高级特性-二、JVM在堆中对象的分配、布局、访问过程

    前面介绍了jvm运行时数据区域后,下面讲解下对内存中数据的其他细节,看他们是如何创建.布局及访问的 一.对象的创建 1.对象的分配 对象的创建分配方式主要有两种:指针碰撞和空闲列表 指针碰撞: 假设堆 ...

  5. jvm学习笔记二(减少GC开销的建议)

    一:触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大.更值得关注的是主GC的触发条件,因为它对系统影响很明显.总 ...

  6. JVM深入理解<二>

    以下内容来自: http://www.jianshu.com/p/ac7760655d9d JVM相关知识详解 一.Java虚拟机指令集 Java虚拟机指令由一个字节长度的.代表某种特定含义的操作码( ...

  7. JVM笔记(二)JVM基本结构

    JVM基本结构 一.运行时内存区域 java虚拟机所管理的内存将会包括以下几个运行时内存区域. 1.程序计数器 Program Counter Register:可以看作当前线程(线程私有)所执行的字 ...

  8. 深入JVM系列(二)之GC机制、收集器与GC调优

    一.回想JVM内存分配 须要了解很多其它内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配 2.大对象直接进入老年代  3.长期存活的 ...

  9. JVM学习笔记(二):垃圾收集

    程序计数器. 虚拟机栈. 本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作. 每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这 ...

随机推荐

  1. 如何成为一个伟大的 JavaScript 程序员

    这篇文章主要概述在我5年工作经验的基础上,我成为优秀JavaScript开发人员所使用的技术和资源. 当前大多数Web开发人员面临着这样一个共同的问题:他们必须在多个不同的领域领先于他人——从数据库到 ...

  2. PhantomJS not found on PATH

    使用vue-cli创建项目后,npm init常出现以下问题:PhantomJS not found on PATH 这是因为文件phantomjs-2.1.1-windows.zip过大,网络不好容 ...

  3. linux系统取证

    目录 0x00 查看系统信息 0x01 用户及组信息 0x02 防火墙及路由信息 0x03 查看网络.端口信息 0x04 系统运行信息查看 0x05 日志查看分析 0x00 查看系统信息 name-a ...

  4. 后台模板引擎ejs与前台模板引擎artTemplate的简单介绍

    动态网页是指前端页面当中的数据内容来源于后台数据库,前端的html代码会随着后台数据的变化而变化,是动态生成的.制作动态网页有两种方式,一种方式是在后台拿到前端的html模板,利用后台模板引擎(如ej ...

  5. js随机生成验证码以及随机颜色

    Javascript通过Math.random()随机生成验证码. 代码如下: <!DOCTYPE html><html> <head> <meta char ...

  6. CF543A Writing Code

    题目描述 Programmers working on a large project have just received a task to write exactly m m m lines o ...

  7. opencv实践::对象提取与测量

    问题描述 照片是来自太空望远镜的星云图像,科学家想知道它的面 积与周长. 解决思路 方法一: 通过二值分割+图像形态学+轮廓提取 #include <opencv2/opencv.hpp> ...

  8. odoo联调

    odoo联调(剑飞花 373500710) 1.准备工作 1.1.参考文章“odoo8.0+PyCharm4.5开发环境配置”配置好odoo开发环境 1.2.下载Chrome浏览器,安装. 1.3.下 ...

  9. 玩转 RTC时钟库 DS1302

    1.前言     最近博主在弄8266编程的时候,偶然发现两个全新时钟模块压仓货: DS1302 DS3231     为了避免资源浪费以及重复编写代码,博主还是抱着尝试的心态去寻找能够同时兼容 DS ...

  10. JAVA aio简单使用

    使用aio,实现客户端和服务器 对一个数进行轮流累加 //服务器端 public class Server { private static ExecutorService executorServi ...