jvm启动
- 首先使用 Java 命令启动JVM
- 其次进行JVM配置的装载——根据当前路径和系统的版本去寻找jvm.cfg文件,装载配置。
每种需要java虚拟机的软件,都会带一个jvm.cfg。然后jvm.cfg的内容是不同的。
#
#
#
# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
# ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
#
#
# List of JVMs that can be used as an option to java, javac, etc.
# Order is important -- first in this list is the default JVM.
# NOTE that this both this file and its format are UNSUPPORTED and
# WILL GO AWAY in a future release.
#
# You may also select a JVM in an arbitrary location with the
# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
# and may not be available in a future release.
#
-server KNOWN
-client IGNORE
idea自带的jvm.cfg
-server KNOWN
-client ALIASED_TO -server
3 .之后会根据加载的配置去寻找JVM.dll文件——JVM的主要实现文件。
4 。再后,通过该文件去初始化JVM,并获得相关的接口,比如JNIEnv接口,通过该接口实现findClass操作。
5.最后,通过相关接口(JNIEnv……),找到程序里的main方法,即可进入程序……
二:jvm结构图

6:逃逸分析:假设在方法体内,声明了一个局部变量,且该变量在方法执行生命周期内未发生逃逸(在方法体内,未将引用暴露给外面)。按照JVM内存分配机制,首先会在堆里创建变量类的实例,然后将返回的对象指针压入调用栈,继续执行。这是优化前,JVM的处理方式。
逃逸分析优化 – 栈上分配,优化原理:JVM分析找到未逃逸的变量(在方法体内,未将引用暴露给外面),将变量类的实例化内存直接在栈里分配(无需进入堆),分配完成后,继续在调用栈内执行,最后线程结束,栈空间被回收,局部变量也被回收。这是优化后的处理方式,对比可以看出,主要区别在栈空间直接作为临时对象的存储介质。从而减少了临时对象在堆内的分配数量。
记住一个结论:启用逃逸分析的运行性能6倍于未启用逃逸分析的程序。逃逸分析是JVM层面的工作,JVM做了逃逸分析,这样没有逃逸的对象就可以被优化,从而减少堆的大小并减少GC。如果JVM没有加逃逸分析,就算自己优化了代码,也不会有效果。
JVM中启用逃逸分析需要安装jdk1.6.0_14+版本,运行java时传递jvm参数 -XX:+DoEscapeAnalysis,取消逃逸分析把+改为-。
7:
对Java栈——栈上分配优化的小结:
- 必须是小对象(一般几十个bytes),且必须是在没有逃逸的情况下,如果JVM使用了逃逸分析优化,则该小对象可以直接分配在栈上,因为栈的空间不大(一般也就到1m封顶了),更没有堆大。
- 直接分配在栈上,方法调用完毕,Java栈帧就立即被移除,故内存可以自动回收,减轻GC压力。
- 大对象(栈的空间不允许)或者逃逸的对象无法在栈上分配(即使启动了JVM的逃逸分析优化,且因为Java栈是线程私有的,不共享,局部对象变量被其他线程或者方法引用了肯定不能在栈分配内存)
8:打印日志分析
8.1、GC 表示垃圾回收,其中DefNew:表示GC发生的区域,这里表示新生代; 6972K->431K(9216K)表示GC前该内存区域已经使用的容量为6972K,回收后该区域使用的容量为431K,该内存的总量为9216K; 6972K->6575K(19456K)表示GC前java堆已经使用的容量为6972K,回收后java堆使用的内存为6575K,java堆的总容量为19456K。
8.2、def new generation表示堆内存的新生代,域包括Eden空间(一般对象生成都存放这个区)和Survivor空间。
8.3、tenured generation表示堆内存的老年代。
8.4、compacting perm gen表示非堆内存也就是永久区,一般存放类加载的信息。
参考:https://yq.aliyun.com/articles/49201
jvm启动的更多相关文章
- NetBeansRCP-添加/修改NetBeans的JVM启动参数
NetBeans运行的速度实在是不敢恭维.还好机器配置还可以,修改其JVM启动参数命令行,以期运行的更加顺畅. 那么如何修改NetBeans IDE的JVM参数呢? 1.到NetBeans IDE的安 ...
- JVM启动参数小结
一:JVM启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),指的是JVM底层的一些配置参数, ...
- 业务系统的JVM启动参数推荐
关键业务系统的JVM启动参数推荐,原文链接请参见:http://calvin1978.blogcn.com/articles/jvmoption-2.html
- JVM启动参数手册——JVM之八
jdk1.4.2 JVM官方地址:http://java.sun.com/j2se/1.4.2/docs/guide/vm/index.html 标准和非标注参数(for windows):http: ...
- jvm启动参数设置 -Dfile.encoding=UTF-8 解决freemark乱码
今天一个spring boot应用windows跑起来后页面显示乱码,加上jvm启动参数为utf-8后,页面显示正常.
- JVM 启动参数及原理 转
Java虚拟机(JVM)是Java应用的运行环境,从一般意义上来讲,JVM是通过规范来定义的一个虚拟的计算机,被设计用来解释执行从Java源码编译而来的字节码.更通俗地说,JVM是指对这个规范的具体实 ...
- JVM启动过程
JVM启动过程包括:加载.连接.初始化 1.加载:就是将class文件加载到内存.详细的说是,将class文件加载到运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封 ...
- Java内存管理-初始JVM和JVM启动流程(二)
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了什么是程序,以及Java程序运行的三个阶段.也顺便提到了Java中比较重要 ...
- JVM启动参数大全
java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...
- jvm 启动参数设置(转载)
JVM启动参数 http://onlyor.iteye.com/blog/1722413 博客分类: java java java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些 ...
随机推荐
- [转]ASP.NET MVC 5 - 将数据从控制器传递给视图
在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果 ...
- java socket通信-传输文件图片--传输图片
ClientTcpSend.java client发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io ...
- excel中,一系列单元格中包含某一个字段的单元格数量?
excel中,一系列单元格中包含某一个字段的单元格数量?这个怎么写公式?如:A列单元格A1-A7的内容分别为 A.AB.BC.AC.CD.AD.EA,怎么数这一列中几个单元格的内容包含A字母? 任意单 ...
- linux命令之find和locate
1.find / -name log.xml 按照名字查找log.xml文件 2.locate log.xml 查找log.xml文件(效率高) 3.grep 'hive' word. ...
- docker n2n安装与调试
docker n2n安装与调试 yum install -y docker docker pull pahud/n2n-docker cd / 10 mkdir data 11 cd data 12 ...
- PHP5 session 详解【经典】
原文:http://www.pkwind.com/php5-session-xiang-jie-jing-dian http协议是WEB服务器与客户端 (浏览器)相互通信的协议,它是一种无状态协议.所 ...
- js积累
动态加载JS文件(function (d) { var t=d.createElement("script");t.type="text/javascript" ...
- 【jQuery系列之插件】jQuery插件---exselect实现联动
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- 腾讯云分布式高可靠消息队列CMQ架构
版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qclou ...
- $.when()方法监控ajax请求获取到的数据与普通ajax请求回调获取到的数据的不同
1.$.when(ajax).done(function(data)}); 2.$.ajax().done(function(data){}); 1中的data被封装进一个对象[data, " ...