choway
2018-12-11 09:23:46

JavaJVM

Java 虚拟机(JVM)在执行 Java 程序时会把它管理的内存划分为多个不同的数据区域。这些区域各有用途,以及创建和销毁的时间。有些内存区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。

程序计数器(Program Counter Register)

由于 JVM 的多线程是通过线程切换并分配处理器执行时间的方式来实现的,所以在任何一个时刻,一个处理器(多核CPU的一个内核)都只会执行一条线程,线程切换后为了确保每个线程能恢复到正确的执行位置,每个线程都需要有个独立的程序计数器。

  • 线程私有;
  • 唯一一个在 JVM 规范中没有规定任何 OutOfMemoryError 的区域;

JVM 栈(JVM Stacks)

Java 方法在执行时会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息;
每个方法从调用到执行结束,对应一个栈帧在 JVM 栈中的入栈到出栈过程;
如果线程请求的栈深度大于 JVM 所允许的深度,将抛出 StackOverflowError;
如果 JVM 栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出 OutOfMemoryError;

  • 线程私有;
  • 在 JVM 规范会抛出 StackOverflowError、OutOfMemoryError;

栈溢出(StackOverflowError)

在 HotSpot 虚拟机中并不区分虚拟机栈和本地方法栈,栈容量使用 -Xss 参数设定;

JVM 堆(JVM Heap)

JVM 堆是被所有线程共享的内存区域,在虚拟机启动时创建;
JVM 规范:所有的对象实例以及数组都在堆上分配;
堆是垃圾回收器管理的主要区域,因此也被称为 GC 堆;
如果在堆中没有内存完成实例分配,并且堆也无法扩展,则抛出 OutOfMemoryError;

堆溢出(OutOfMemoryError,简称 OOM)

  • -Xms 设定堆最小值,即初始化堆大小;
  • -Xmx 设定堆最大值,当堆内存不够时,堆大小会自动扩展,直到达到堆最大值;
    -Xms 和 -Xmx 设置一样可避免堆自动扩展;

方法区(Method Area)

方法区用于存储已被 JVM 加载的类信息、常量、静态变量、即使编译器编译后的代码等数据,各个线程共享;
该区域的内存回收目标主要针对常量池的回收和类型卸载;

  • 线程共享;
  • 在 JVM 规范中,当方法区无法满足内存分配,则抛出 OutOfMemoryError;

运行时常量池(Runtime Constant Pool)

常量池是方法区的一部分,也会抛出 OutOfMemoryError;
Class 文件除了有类的版本、字段、方法、接口等描述信息外,还有常量池用户存放编译期的各种字面量和符合引用,这些内容在类加载后进入方法区的运行时常量池中存放。

方法区、常量池溢出

-XX:PermSize 和 -XX:MaxPermSize 设定方法区大小;

直接内存(Direct Memory)

直接内存不是 JVM 运行时数据的一部分,也不是 JVM 规范中定义的内存。
在 JDK 1.4 中新加入了 NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的 IO 方式,它可以直接使用 Native 库直接分配堆外内存。

  • -XX:MaxDirectMemorySize 参数指定直接内存大小;
  • 如果不指定,默认与 -Xmx 值一样;

Choway Blog的更多相关文章

  1. 日向blog开发记录

    一点历史关于,Sonne Blog 2016.03.25springmvc + hibernate框架搭建.2016.04.21日向blog首页.2016.04.24分页实现.2016.04.30登录 ...

  2. blog (后续更新)

    设计Model(设计数据库) from django.db import models # Create your models here. class BlogsPost(models.Model) ...

  3. tensorflow 一些好的blog链接和tensorflow gpu版本安装

    pading :SAME,VALID 区别  http://blog.csdn.net/mao_xiao_feng/article/details/53444333 tensorflow实现的各种算法 ...

  4. http://blog.csdn.net/java2000_wl/article/details/8627874

    http://blog.csdn.net/java2000_wl/article/details/8627874

  5. [Android Pro] http://blog.csdn.net/wuyinlei/article/category/5773375

    http://blog.csdn.net/wuyinlei/article/category/5773375

  6. android 蓝牙 http://blog.csdn.net/u012843100/article/details/52384219

    http://blog.csdn.net/u012843100/article/details/52384219

  7. 【三】用Markdown写blog的常用操作

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  8. django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5

    前面说完了此项目的创建及数据模型设计的过程.如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载. 代码也已经部署到sina sea上,地址为http://fengzhen ...

  9. 使用Hexo搭建专属Blog

    喜欢折腾的自己最开始在博客园有仿写几篇Blog,虽也可以自己改变风格,可是到底不是独立的一块儿地方,要知道独立的才是自己的;有属于自己独立的域名和Blog,真真是一件很爽的存在.在各种大牛的分享下在G ...

随机推荐

  1. ubuntu 编译VLC3.0.0

    参考链接 https://blog.csdn.net/u014755412/article/details/78874038 https://www.cnblogs.com/wpjamer/p/919 ...

  2. goweb-访问数据库

    访问数据库 对许多Web应用程序而言,数据库都是其核心所在.数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息.产品目录或者新闻列表等. Go没有内置的驱动支持任何的数据库,但是Go定义了d ...

  3. list交集、差集、并集、去重并集

    // 交集 List<String> intersection = list1.stream().filter(item -> list2.contains(item)).colle ...

  4. UML-业务规则

    样例:

  5. [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)

    设第i个人在t时刻生/死为(x,0/1,t),然后显然能够连上(x,0,t)->(x,0,t-1),(x,1,t)->(x,1,t+1),然后对于每个限制,用朴素的2-SAT连边即可. 但 ...

  6. Spring Boot使用Liquibase最佳实践

    Liquibase问题 随着项目的发展,一个项目中的代码量会非常庞大,同时数据库表也会错综复杂.如果一个项目使用了Liquibase对数据库结构进行管理,越来越多的问题会浮现出来. ChangeSet ...

  7. 以puppeteer抓取微指数,puppeteer基本示例,docker部署headless

    还是直接上代码 https://github.com/cclient/weizhishu-puppeteer 根据关键字获取微博指数 早期版本以常规的构造cookie,token,sign的访问api ...

  8. slqmap简单使用

    网址:-u 指定哪个参数:-p 需要登录用--cookie 获得所有数据库:--dbs 获得所有用户:--users 指定某个数据库:-D 显示所有表--tables 指定某个数据表:-T 显示列:- ...

  9. centos7 ModuleNotFoundError: No module named 'users'

    centos7下运行django项目时ModuleNotFoundError: No module named 'users' 由于我的项目目录是下面这样: 因为找不到users的路径 所以在mana ...

  10. iOS燃烧动画、3D视图框架、天气动画、立体相册、微信朋友圈小视频等源码

    iOS精选源码 iOS天气动画,包括太阳,云,雨,雷暴,雪动画. 较为美观的多级展开列表 3D立体相册,可以旋转的立方体 一个仪表盘Demo YGDashboardView 一个基于UIScrollV ...