1.java源码编译机制

1.1 分析和输入到符号表(Parse and Enter)
Parse:词法和语法分析
Enter:将符号输入到符号表
1.2 注解处理(Annotation Processing)
处理用户自定义的annotation
1.3 语义分析和生成class(Analyse and  Generate)
Analyse:基于抽象语法树进行一系列的语义分析
Generate:生成class,实例-》构造器、静态成员-》<clinit>、抽象语法树-》字节码(后序便利语法树)、最少代码转换。
class文件中包含的信息
*结构信息
*元数据
*方法信息
2.类加载机制
指.class文件加载到JVM中,并形成Class对象的机制。
可以在运行时动态加载.class
*装载(Load)-》链接(link){ 校验(Verify)->准备(Prepare)->解析(Resolve)可选操作}-》初始化(Initialize)
2.1 装载(Load)
找到二进制字节码并加载到JVM中(标识:类的全限定名+ClassLoader实例ID)
2.2 链接(Link)
对二进制字节码的格式进行校验、初始化静态变量、解析类中的借口、类。
2.3 初始化(Initialize)
执行类中的静态初始化代码、构造器代码以及静态属性。
2.4 JVM类加载通过ClassLoader及其子类来完成
(加载顺序由上到下)
BootStrap Class Loader ->SJAVAHOME/jre/Lib/rt.jar
^
Extension Class Loader ->SJAVAHOME/jre/lib/ext/*.jar
(对应类名:ExtClassLoader)
^
System Class Loader -> SCLASSPATH
(对应类名:AppClassLoader)
^
User-Defined Class Loader
(开发人员继承ClassLoader自行实现的ClassLoader)
sati
类加载器委托机制:由最上面的类加载器开始加载类

3.JVM内存管理
(方法区、堆、本地方法栈、PC寄存器、JVM方法栈)
3.1 方法区
存放:类的信息(名称、修饰符等)、静态变量、final、Field、类中方法信息。
内存超过:OutOfMemory
大小调整
-XX:PermSize    最小值
-XX:MaxPermSize    最大值
3.2 堆
存放:对象实例、数组值,new出来的对象
32位操作系统最大2G
-Xms    JVM启动时最小Heap内存
-Xmx    JVM启动时最大Heap内存
(通常设置 -Xms 等于 -Xmx)
-XX:MinHeapFreeRatio    当空余堆内存小于 40% 会增加到 -Xmx
-XX:MaxHeapFreeRatio    当空余堆内存大于 70% 会减小到 -Xms
-Xmn    新生代的大小
-XX:SurvivorRatio    调整Eden Space、Survivor Space的大小
-XX:PretenureSizeThreshold=1024    (单位字节,默认0)代表对象超过多大就不在新生代分配,而是直接在旧生代分配
旧生代内存 -Xmx 减去 -Xmn
3.3本地方法栈
存放:每个native方法调用的状态
3.4 PC寄存器和JVM方法栈
存放:线程(每个线程会创建PC寄存器和JVM方法栈)
PC寄存器占用CPU寄存器或操作系统内存
JVM方法栈占用操作系统内存
JVM方法栈空间不足:StackOverflowError
-Xss    指定JVM方法栈大小
-XX:TLABWasteTargetPercent    设置TLAB 可占用Eden Space 的百分比,默认为1%
TLAB(Thread Local Allocation Buffer)
启动参数上增加
-XX:+PrintTLAB    查看TLAB空间的使用情况
-XX:SoftRefLRUPolicyMB    softReference(软引用)的存活时间,默认为1秒
-XX:MaxTenuringThreshold    在串行和ParNew方式时可设置,Minor GC中存活的次数为多少,才放入到旧生代
4. Sun JDK 中可用的GC
4.1 新生代可用GC
4.1.1 Serial GC (串行GC)
整个扫描和复制都是单线程方式进行
-XX:+UseSerialGC    强制指定用此方法回收GC
4.1.2 Parallel Scavenge (并行回收GC)
在多CPU的机器上采用多线程回收
-XX:InitialSurvivorRatio    设置Eden、S0、S1的比例划分、默认为8
jdk1.6后采用 -XX:SurvivorRatio
-XX:-UseAdaptiveSizePolicy    固定Eden、S0、S1的大小
-XX:+UseParallelGC    强制指定用此方法回收GC
-XX:ParallelGCThreads    强制指定线程数
4.1.3 ParNew (并行GC)
在配置为CMS GC的情况下,新生代默认采用并行GC方式
-XX:+UseParNewGC    强制指定
-XX:+DisableExplicitGC    禁止程序中调用System.gc 触发GC
4.2 旧生代可用的GC
4.2.1 串行
-XX:+PrintGCApplicationStoppedTime    查看GC造成的应用暂停的时间
5.异常
1.旧生代空间不足
java.lang.OutOfMemoryError: Java heap space
2.Permanet Generation 空间满
java.lang.OutOfMemoryError: PermGen space
3.CMS GC出现 Promotion failed 和 concurrent mode failure
增大survivor space、旧生代空间或调低触发兵法GC的比率
-XX: CMS MaxAbortablePrecleanTime=5 (单位为ms)避免CMS在remark完毕后很久才触发sweeping动作
启动时设置FullGC的执行间隔时间
-java -Dsum.rmi.dgc.client.gcInterval=3600000
禁止RMI调用 System.gc
-XX:+DisableExplicitGC
Sun JDK 提供两种简单方式现在GC
-XX:GCTimeRatio=n    设置JVM GC策略(吞吐量优先)
-XX:MaxGCPauseMillis=n    设置JVM GC策略(暂停时间优先)
6.新内容GC
Garbage First 简称G1:减少GC所导致的应用暂停时间,同时保持JVM堆空间的利用率
7.Real-Time JDK
1.新内存管理机制
Immortal、Scoped内存区域,均不受GC管理,基于这两个内存区域来编写应用完全不用担心GC会造成的暂停现象。
2.允许Java应用直接访问物理内存
不需要勇敢native code才能访问,能访问物理内存,直接将对象放入物理内存,而非JVM heap中。
8.JVM内存查看方法和分析工具
8.1 输出GC日志
a.输入控制台:
JVM启动参数加入-XX:PrintGC -XX:PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime
分别输出GC的简要信息、GC的详细信息、GC的时间信息、GC造成的应用暂停时间
b.输入到指定文件
JVM启动参数中再加入-Xloggc:gc.log
可用于GC跟踪分析的参数还有-verbose:gc、-XX:+PrintTenuringDistribution等
8.2 JConsole 
JDK5自带工具,位于JDK的bin目录下,窗口化直接查看JVM信息
JVisualVM
JDK6 可查看JVM内存消耗,线程执行,消耗CPU、内存动作,可以安装VisualGC插件分析GC
JMap
JDK的bin目录,可以查看各个代的内存状况、JVM中对象的内存占用状况
JHat 
JDK6中自带肥西Jvm堆 dump 文件的,分析jvm heap中对象内存占用状况、以及引用关系。
JStat
JDK的bin目录下,除了分析GC,还可以用于分析编译的状况、class加载的状况等
Eclipse Memory Analyzer
Eclipse 提供用于分析jvm堆 dump文件的插件,对象内存占用、引用关系、分析内存泄漏等。
http://www.eclipse.org/mat/    
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/xiaosheng-aquarius/p/3583906.html

java代码的执行机制+JVM+GC相关推荐

  1. java代码的执行机制_关于java代码的执行机制

    转载于:https://blog.csdn.net/houfeng777123/article/details/74316748 1.Java代码执行流程 ·第一步:*.java-->*.cla ...

  2. 诊断神器Arthas,动态跟踪Java代码,实时监控JVM状态

    简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码:实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 .支持JDK 6+,支持Linux/M ...

  3. java代码块执行顺序_Java笔记 | Java代码块执行顺序测试

    最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...

  4. 记一次Java代码不执行,也不报错!求大佬赐教!

    记一次Java代码不执行,也不报错!求大佬赐教! 发生背景 问题所在 发生背景 实训在做串口通讯的时候,进行数据处理时,代码执行一部分,有一部分没有执行. 十分纳闷,代码如下: /*** 处理返回结果 ...

  5. JAVA代码实现执行CMD命令的方法

    用JAVA代码实现执行CMD命令的方法! Runtime rt = Runtime.getRuntime(); Process p = rt.exec(String[] cmdarray);     ...

  6. 【剧前爆米花--爪哇岛寻宝】初识Java,了解Java代码的运行机制及JDK,JRE,JVM等

    作者:困了电视剧 专栏:<JavaSE语法与底层详解> 文章分布:这是一篇知识点较为基础的文章,我会先将JavaSE相关的知识给罗列一遍,然后在后续的文章中会对其中重要的点再逐一进行底层剖 ...

  7. java gc回收堆还是栈_浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  8. 20191212浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  9. java 判断顺序_通过指令码来判断Java代码的执行顺序(++问题与return和finally的问题)...

    问题 在<深入理解Java虚拟机>一书中遇到了如下代码: public int method() { int i; try { i = 1; return i; } catch (Exce ...

最新文章

  1. 求矩阵两条对角线元素之和
  2. PTA数据结构与算法题目集6-4 6-3 6-8
  3. SpringBoot 自动解析参数:HandlerMethodArgumentResolver
  4. 三相滤波器怎么接线_数字滤波器设计的一般套路
  5. windows11条件下将yafu路径添加到环境变量
  6. 徐州2018年大学计算机比赛,2018年第四届徐州市中小学生学科综合能力大赛获奖名单!权威发布!【五年级】...
  7. eclipse windows 窗口背景颜色 保护视力
  8. 从Logistic回归到神经网络的一点感悟
  9. 数据中心机房设备标签规范建议
  10. hdmi怎么支持2k分辨率_安卓机皇发布!全系支持2K分辨率+120Hz刷新率
  11. C语言 输出菱形 最短代码!
  12. 区块链项目 - 2 工作量证明
  13. Arduino 旋转编码器ky-040
  14. 2018.07.19【2018提高组】模拟C组
  15. Windows App开发之使用通知与动态磁贴
  16. 面试官问:“给你一支笔,怎么测试?”这答案让人惊叹…
  17. 基于keepalived+nginx部署强健的高可用7层负载均衡方案20151214
  18. ICP许可证申请误区一:我是创业型小公司,开发了一款APP,需不需要申请ICP许可证,该怎么办?
  19. Paper:《The Illustrated Transformer》翻译与解读
  20. 区块链赋能律所非诉业务研究报告 | TokenInsight金杜律师事务所

热门文章

  1. 实时道路路况计算的认识
  2. c 语言boll型变量,My语言几种常见指标编写与跨指标模型的案例分析
  3. 一种基于多图注意力机制的虚假新闻检测方法
  4. postgresql数据库迁移timescale插件问题处理
  5. 30款免费四页幼师求职简历word模板,四页求职简历模板,含自荐信
  6. 红宝书 第18章整理——XPath
  7. java unsupport_Java-如何使用Android自动化修复“ UnsupportedC...
  8. 有道写作浏览器扩展实践
  9. 远鉴科技“语音识别”技术获美亚柏科青睐!
  10. JavaScript的Vue框架知识点大全