DAY 1

Jvm- java虚拟机

  1. 类加载子系统
    1. 加载class文件到方法区
  2. 方法区
    1. 存放类信息
    2. 常量信息
    3. 常量池信息
    4. 辅助堆栈的永久区,解决堆栈信息的产生,是先决条件

  3.  Java堆(重要)

    1. 虚拟机启动的时候建立
    2. 最主要的内存工作区域
    3. 几乎所有的对象实例都存放到Java堆中,堆内存是所有的线程共享的
    4. 解决数据存储的问题

  4.    直接内存

    1. Java的NIO库允许java程序使用直接内存,从而提高性能,速度优于JAVA堆
    2. 读写频繁可考虑使用

  5. Java栈

    1. 线程创建的时候被创建
    2. 保存局部变量、方法参数、引用、java方法的调用、返回值等
    3. 解决数据运行问题

  6. 本地方法栈(不重要)

  7. 垃圾回收系统(重要)

    1. GC垃圾回收系统

  8. PC寄存器(不重要)

    1. 保存一些指针

  9. 执行引擎

    1. 负责执行虚拟机的字节码

堆栈方法区详细

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概念以及常用设置的更多相关文章

  1. WebSphere常用设置

    WebSphere常用设置 1.查看环境配置信息D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\AboutThisPro ...

  2. JVM基础(6)-常用参数总结

    参考文章: 并发编程网:http://ifeve.com/useful-jvm-flags-part-4-heap-tuning/ 一.参数分类 HotSpot JVM 提供了三类参数. 第一类包括了 ...

  3. HTML head标签内部常用设置

    HTML head标签内部常用设置 在网页html文件中,head标签里面通常放置的代码是用来对网页进行相关设置的内容.下面就是对这些内容的介绍. meta标签的设置 在网页中,meta标签最常用的设 ...

  4. Java基础-考察JVM内部结构的常用工具介绍

    Java基础-考察JVM内部结构的常用工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们可以通过jvisualvm.exe考察jvm内部结构.而jvisualvm.exe ...

  5. composer 基本概念与常用命令总结

    目录 composer 基本概念与常用命令总结 基本概念 软件安装 linux/mac安装 windows 配置镜像 如何使用 常用命令 全局参数 初始化 init 初始化参数 依赖安装 instal ...

  6. Matplotlib数据可视化(2):三大容器对象与常用设置

      上一篇博客中说到,matplotlib中所有画图元素(artist)分为两类:基本型和容器型.容器型元素包括三种:figure.axes.axis.一次画图的必经流程就是先创建好figure实例, ...

  7. PLSQL Developer常用设置及快捷键

    CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...

  8. pycharm快捷键及一些常用设置

    pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...

  9. PLSQLDeveloper 常用设置

    PLSQL Developer常用设置及快捷键   1.登录后默认自动选中My Objects (已验证可用)   默认情况下,PLSQL Developer登录后,Brower里会选择All obj ...

随机推荐

  1. Linux之DHCP搭建命令集锦

    systemctl start dhcpd        //启动DHCP systemctl enable dhcpd                //配置服务开机启动 ps aux | grep ...

  2. vstring.hpp

    //vov #ifndef VSTRING_HPP #define VSTRING_HPP #include <string> #include <sstream> #incl ...

  3. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  4. stm32WB55xx 外设资源

    1.FLASH(闪存) 2.Radio System(无线系统:兼容BLE5.0与IEEE802.15.4标准,由2.4GHz射频前端.BLE和IEEE802.15.4物理层控制器组成,无线低功耗协议 ...

  5. linux文件名乱码解决

    问题描述:公司的FTP服务器早就搭建好,windows客户端可以上传文件到FTP服务器,但是上传去的文件在LINUX目录下文件是乱码. 解决方法:首先编辑/etc/sysconfig/i18n这个文件 ...

  6. Google Analytics电子商务篇(Universal版)

    Google Analytics是一款用于统计分析网站流量.浏览行为,可用于衡量用户与您网站的互动情况的全新方式.最近刚接触不久,发现其功能真的十分强大,记录下电子商务配置方法.(新手,老鸟勿喷) G ...

  7. Jenkins的安装配置和使用

    Jenkins的安装配置和使用 1 Jenkins介绍 w3cschool中这样介绍:Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个 ...

  8. gevent模块学习(二)

    2. Queue类,常用用于Greenlet之间的异步共享 q = gevent.queue.Queue(maxsize=None, items=None) -> Queue 说明: 创建一个指 ...

  9. UIPath Level 1

    近日搬砖养家糊口,忙于项目,博客更新一度中断,自己都觉得委屈了. 培训视频看的眼睛耳朵疼,做完最后一个终极考试,哪儿哪儿都觉得不舒服~ 先来个截图,醒醒脑~ 今儿就歇下了~

  10. mysql索引的选择

    一:索引的常见模型 1.哈希表(key-value)存储的数据结构 缺点:hash索引在做区间查询时,速度慢. 优点:hash索引很适用于等值查询的场景,比如memcached以及其他一些nosql引 ...