JVM概念以及常用设置
DAY 1
Jvm- java虚拟机
- 类加载子系统
- 加载class文件到方法区
- 方法区
- 存放类信息
- 常量信息
- 常量池信息
- 辅助堆栈的永久区,解决堆栈信息的产生,是先决条件
3. Java堆(重要)
- 虚拟机启动的时候建立
- 最主要的内存工作区域
- 几乎所有的对象实例都存放到Java堆中,堆内存是所有的线程共享的
- 解决数据存储的问题
4. 直接内存
- Java的NIO库允许java程序使用直接内存,从而提高性能,速度优于JAVA堆
- 读写频繁可考虑使用
5. Java栈
- 线程创建的时候被创建
- 保存局部变量、方法参数、引用、java方法的调用、返回值等
- 解决数据运行问题
6. 本地方法栈(不重要)
7. 垃圾回收系统(重要)
- GC垃圾回收系统
8. PC寄存器(不重要)
- 保存一些指针
9. 执行引擎
- 负责执行虚拟机的字节码
堆栈方法区详细
Java堆(核心)
Java堆完全自动化管理,通过垃圾回收机制自动清理,不需要显示的释放。
Java堆如何划分?(面试)
通常分为新生代和老生代,其中新生代存放新生的对象,老的存放老的对象。
新生代:eden区(对象刚实例化的状态)、S0(from)区、S1(TO)区(s0\s1大小相等、可相互转换的角色)
对象通常先分配到eden区,在一次GC后,如果对象还在,那么进去s0或者s1区,后面没经历一次GC年龄加1,到达一定的年龄后,进入老年代。
新生代中GC的频率会比老年代高很多。
Java栈(不是特别重要)
线程私有的内存空间。
局部变量表:报错信息
操作数栈:计算过程中的临时变量
帧数据区:报错信息
方法区:
如果系统定义太多的类,可能会导致方法区溢出。
虚拟机参数:
堆分配参数(一)(+启用,-禁用)
(1) -XX 对于系统级别的(JVM)配置,配置日志信息或者说配置JVM使用什么样的垃圾回收器。
(2)非-XX的基本上都是对应用层面上的配置。
+启用 -禁用
-XX:+PrintGC使用这个参数,虚拟机启动后,只要遇到GC就会打印日志。
-XX: +UseSerialGC配置串行回收器
-XX:+PrintGCDetails可以查看详细信息,包括各个区的情况
-Xms:设置java程序启动时初始化堆大小
-Xmx: 设置java程序能获得的最大堆大小。
-XX:+PrintCommandLineFlags:可以将隐式或者显示传给虚拟机的参数输出
初始值与最大值配置的一样可减少GC的回收次数。
新生代配置:
Xmn:设置新生代的大小,这个参数对GC行为有很大的影响,占整个堆空间的1/3到1/4左右。
-XX:用来设置新生代中eden空间和from/to空间的比例,含义-XX:SurvivorRatioe=eden/from=eden/to
实例2:
不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。除了可以设置新生代的绝对大小(-Xmn),还可以使用(-XX:NewRatio)设置新生代和老年代的比例:-XX:NewRatio=老年代/新生代
堆溢出处理:
如下的配置可将溢出的信息打印到路径下,可copy文件到eclipse下的memory analyer插件查看
-Xss指定线程的最大栈空间,参数决定了函数可调用的最大深度
方法区:
和java堆一样,是所有线程共享的内存区域,它用于保存系统的类信息,可以保存多少信息可以对其进行配置,在默认情况下,-XX:MaxPremSize为64MB,如果系统运行时生产大量的类就需要设置一个相对合适的方法区,以避免永久区内存溢出。
直接内存配置:
广泛用在NIO中,直接跳过java堆。
垃圾回收概念和其算法:
垃圾回收有很多算法:如引用计数法、标记压缩法、
引用计数:被引用+1 失去引用 -1 遇到循环或者递归浪费性能。
标记清除法:被标记的时候由于JVM不会清除完全,会有碎片的问题。比如1M需要标志清除,但是可能JVM只能清除0.999M。
复制算法(新生代) from区to区相互转换角色。
标记压缩法(老年代):在标记清除的基础下进行压缩,压缩到内存的一端进行清除防止碎片的问题。
分代算法:根据对象的特点把内存分为N块,而后根据每个内存的特点使用不同的算法。
分区算法:oracle新的概念,主要讲整个内存分为N多个小的独立空间,每个小空间都可以独立使用。减少GC停顿。
GC停顿:GC回收的时候会让所有应用的线程进入停顿状态,回收完成后再继续。
对象如何进入老年代:
-XX:MaxThnuringThreshold, 默认15次。
-XX:PretenureSizeThreshold指定进入老年代的对象大小。要注意TLAB区域优先分配空间。
TLAB:每一个线程都会产生一个TLAB区,为了加速对象分配而生的。每一个TLAB区来避免多线程冲突的问题,提高对象分配的效率。一般不会太大。
-XX:+UseTLAB使用TLAB区。默认使用。
JVM概念以及常用设置的更多相关文章
- WebSphere常用设置
WebSphere常用设置 1.查看环境配置信息D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\AboutThisPro ...
- JVM基础(6)-常用参数总结
参考文章: 并发编程网:http://ifeve.com/useful-jvm-flags-part-4-heap-tuning/ 一.参数分类 HotSpot JVM 提供了三类参数. 第一类包括了 ...
- HTML head标签内部常用设置
HTML head标签内部常用设置 在网页html文件中,head标签里面通常放置的代码是用来对网页进行相关设置的内容.下面就是对这些内容的介绍. meta标签的设置 在网页中,meta标签最常用的设 ...
- Java基础-考察JVM内部结构的常用工具介绍
Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ...
- composer 基本概念与常用命令总结
目录 composer 基本概念与常用命令总结 基本概念 软件安装 linux/mac安装 windows 配置镜像 如何使用 常用命令 全局参数 初始化 init 初始化参数 依赖安装 instal ...
- Matplotlib数据可视化(2):三大容器对象与常用设置
上一篇博客中说到,matplotlib中所有画图元素(artist)分为两类:基本型和容器型.容器型元素包括三种:figure.axes.axis.一次画图的必经流程就是先创建好figure实例, ...
- PLSQL Developer常用设置及快捷键
CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...
- pycharm快捷键及一些常用设置
pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...
- PLSQLDeveloper 常用设置
PLSQL Developer常用设置及快捷键 1.登录后默认自动选中My Objects (已验证可用) 默认情况下,PLSQL Developer登录后,Brower里会选择All obj ...
随机推荐
- java程序可以跨平台运行的原因
java有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台. 1, java代码不是直接运行在CPU上,而是 ...
- C# interface 的隐式与显示实现及适应范围源码演示
把代码过程中经常用到的一些代码段做个记录,如下的资料是关于C# interface 的隐式与显示实现及适应范围演示的代码. interface IAnimal { void Dog(); } clas ...
- LCSS最长公共子序列算法
0.论文基本介绍以及相关内容 分析移动用户位置的相似性,提取移动用户的相似路径在出行路径预测.兴趣区域发现.轨迹聚类.个性化路径推荐等领域具有广泛的应用. 重点:利用移动用户定位数据找到合适轨迹的表示 ...
- Activiti之流程通过、驳回、会签、转办、中止、挂起等核心操作封装(Activiti5.9)
http://blog.csdn.net/rosten/article/details/38300267 package com.famousPro.process.service.impl; imp ...
- 修改 input / textarea placeholder 属性的颜色和字体大小
话不多说,直接上代码: input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #666; fon ...
- F7+vue 物理返回键监听使用
以前使用的是纯F7,这个项目加了Vue进去,但碰到了一个问题,就是这样监听不到安卓物理键的返回,它是点击返回,直接推出程序,这个坑有点深,查了不少资料也问了不少人,最后在网上看到了别人的写的,自己也改 ...
- hdu6395 (矩阵快速幂+分块)
Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In Hand Onli ...
- Python3 NameError: name 'open' is not defined处理办法
一.说明 之前默认以为python的open方法用存哪里都没什么区别的,然后昨天直接在"__del__()"中使用今天同事跑程序时反馈程序报错“Python3 NameError: ...
- Vue.js安装使用教程
一.说明 上大学前,请的都是前端JavaScript.后端ASP/PHP/JSP.前后端代码混杂:上大学时,请的都是前端Jquery.后端SSH.前后端代码分离通过模板关联:大学出来后,请的都是前端三 ...
- JSP页面传值出现中文乱码的问题
在接收值的jsp页面代码的body里添加: <%request.setCharacterEncoding("utf-8"); %> //这里是设置utf-8为jsp页 ...