博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jvm 诊断与优化 (1)
阅读量:6408 次
发布时间:2019-06-23

本文共 938 字,大约阅读时间需要 3 分钟。

hot3.png

jvm分为:

  1. 类加载子系统 : 负责从网络或文件系统中加载类
  2. 垃圾回收系统 : 对方法区,java堆,直接内存,进行回收。负责对象的管理
  3. 执行引擎 : 负责执行字节码

{ 受到GC管理(线程共享)

  1. java堆  : 在jvm启动时创建,主要的内存工作区域。java所有对象实例都放在其中,是所有线程共享的
  2. 方法区 (持久区PermSize):存放常量(字符串数字)和类加载后的信息
  3. 直接内存 : 指操作系统中的内存,java可以向系统申请。访问比堆来的快

}{为每个线程私有空间

  1. java栈 :一个线程启动时创建线程都有各自的栈,保存着局部变量,方法参数。和方法的调用,返回密切相关
  2. 本地方法栈 : 与java栈类似,用于本地方法的调用(c,c++)
  3. pc寄存器 : 是每个线程的私人空间

}

设置最大空间256MB(按需分配),  初始空间50MB

java -Xmx256M    -Xms50M         // 代码中查看: Runtime.getRuntime().maxMemory()

设置线程最大的空间,128K, 决定java嵌套调用的最大层次

(说明:java每嵌套调用一个方法就会向java栈中压入一个栈帧①。调用的层次越多栈内存就消耗的越多。当栈内存已经无法支付方法的调用时抛出StackOverflowError)

java -Xss128K 

设置方法区的初始与最大使用空间分别为5MB和64MB

java -XX:PermSize=5M -XX:MaxPermSize=64M            //jdk6 , jdk7 设置

(说明:分配越大的空间,就可以加载越多的类。动态代理可能会创建大量并加载大量的类。

在jdk8中的设置: java -XX:MaxMetaspaceSize64M。在jdk中如果不设置大小,虚拟机可能会耗尽所有的系统内存,因为它用的是直接内存。)

①栈帧:{

1.局部变量表:用于存在方法的参数与局部变量,仅仅是变量名,其引用指向堆中

2.操作数据栈:保存计算过程的中间结果,一个临时的存储空间

3.帧数据区: 常量池解析,方法的返回结果,与异常的处理

}

转载于:https://my.oschina.net/u/2552286/blog/663967

你可能感兴趣的文章
javascript-数据类型
查看>>
宜人贷蜂巢API网关技术解密之Netty使用实践
查看>>
js事件委托总结
查看>>
蚂蚁金服数据质量治理架构与实践
查看>>
一篇文章了解大前端
查看>>
IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
查看>>
Quiz - 回顾
查看>>
消息队列系列二(IOT中消息队列的应用)
查看>>
写了一个个人资产管理的后台系统
查看>>
JavaScript隐式类型转换
查看>>
Web前端开发标准规范
查看>>
PAT A1079
查看>>
HTML面试题整理总结
查看>>
电脑不支持MOV怎么办 怎么快速将mov格式转换为MP4
查看>>
152. Maximum Product Subarray
查看>>
vue+node全栈移动商城【6】-node接口配置文件
查看>>
小程序音视频功能的原理及应用
查看>>
Kotlin整合Vertx开发Web应用
查看>>
前端常用设计模式(2)--策略模式(strategy)
查看>>
991. Broken Calculator
查看>>