随笔分类 -  Java 虚拟机

摘要:Java8 增加了 Lambda 表达式,很大程度使代码变的更加简洁紧凑了,那么 Java8 是如何实现 Lambda 表达式的呢? 直接看一个简单的创建线程的例子。 执行 编译生成文件 ,然后用 命令来分析这个class文件。 执行 显示所有类和成员。 由上面的代码可以看出编译器根据 Lambda 阅读全文
posted @ 2019-07-29 00:23 O'Neal 阅读(1127) 评论(0) 推荐(1)
摘要:配置JMX远程连接 1. 配置启动参数 启动jar时,添加如下配置 启动参数说明 1. :配置一个远程服务器上未被占用的端口 2. :配置 JMX 是否启用 ssl 3. :配置 JXM 是否启动鉴权 4. :配置服务器 IP 2. 配置 jvisualvm 添加远程主机信息,填写主机名,端口。端口 阅读全文
posted @ 2019-07-28 00:09 O'Neal 阅读(1143) 评论(0) 推荐(0)
摘要:当调试 Web 应用时,经常需要使用 ide 远程连接,来进行 debug 调试。使用 Springboot 内置服务器和使用 Tomcat 服务器是常见的应用部署方式,可以用不同的配置方式来启动远程 debug 模式。 Springboot 应用 1. 配置启动参数 运行jar时加上debug参数 阅读全文
posted @ 2019-07-27 14:34 O'Neal 阅读(6346) 评论(0) 推荐(0)
摘要:命令行工具 1. jps JVM Process Status Tool,显示虚拟机进程。 用法 : 参数说明 q:打印进程号 l:打印启动类的全限定名 m:打印启动类的 main 方法入参 v:打印指定的虚拟机参数 V:打印类名 例子 : 、`jps l` 2、jstat JVM statisti 阅读全文
posted @ 2019-07-27 01:36 O'Neal 阅读(385) 评论(0) 推荐(0)
摘要:示例 指的是,以 Server模式启动,初始堆1024m,最大堆1024m,初始新生代256m,最大新生代512m,打印详细的GC日志,并输出到gc.$$.log。 常见虚拟机参数 client   客户端模式。 server   服务端模式,Java8 64 阅读全文
posted @ 2019-07-27 00:32 O'Neal 阅读(308) 评论(0) 推荐(0)
摘要:一、垃圾收集算法 1. 标记 清除算法   首先标记出所有需要回收的对象,然后统一回收所有被标记的对象。该算法的 效率不高 ,而且存在 内存碎片 的问题。 2. 复制算法   将内存按容量划分为大小相等的两块,每次只使用其中一块进行内存分配,当这块内存用完了, 阅读全文
posted @ 2019-07-26 01:10 O'Neal 阅读(336) 评论(0) 推荐(0)
摘要:解析调用   方法调用的目标方法在Class文件里是一个常量池中的符号引用,在类加载的解析阶段,将其中一部分符号引用转化为直接引用,这种解析的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期不可变(编译期可知,运行器不可变)。这类方法的调用称 阅读全文
posted @ 2019-07-25 02:31 O'Neal 阅读(426) 评论(0) 推荐(0)
摘要:字节码指令   Java虚拟机的字节码指令由一个字节长度,代表着某种特定操作含义的操作码以及跟随其后的零至多个代表此操作所需参数的操作数所构成的。如果忽略异常,JVM的解释器通过下面的伪代码可有效工作: 操作字节码   可以利用开源库直接操作字节码,如CGLi 阅读全文
posted @ 2019-07-24 01:53 O'Neal 阅读(279) 评论(0) 推荐(0)
摘要:  Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙。当遇到需要占用8位字节以上的数据项时,会按照高位在前的方式分割成若干个8 阅读全文
posted @ 2019-07-23 01:19 O'Neal 阅读(454) 评论(1) 推荐(0)
摘要:   类加载机制 :虚拟机把描述类的数据从class文件加载到内存,并对数据进行验证、准备、解析、初始化,最终形成可以被虚拟机直接使用的Java类型。验证、准备、解析这3个过程统称为 连接 。 类加载过程 1. 启动虚拟机   虚拟机通过引导类加载器创建一个初 阅读全文
posted @ 2019-07-22 15:59 O'Neal 阅读(273) 评论(0) 推荐(0)
摘要:异常   Java虚拟机异常使用Throwable或其子类的实例来表示,抛异常本质上是程序控制权的一种即时的、非局部的转换,即从抛出的地方转换至处理异常的地方。   导致异常的原因 执行了athrow字节码指令。 虚拟机同步检测到程序发生了非正常的执行情况,这 阅读全文
posted @ 2019-07-22 00:31 O'Neal 阅读(301) 评论(0) 推荐(0)
摘要:  栈帧是Java虚拟机栈的结构,每个栈帧都有自己的局部变量表、操作数栈、动态链接和方法返回地址等信息,还允许携带与JVM实现相关的附加信息,如,对程序调试提供支持的信息。 1 局部变量表   局部变量表存储基本数据类型(8种)、对象引用、returnAddr 阅读全文
posted @ 2019-07-21 07:40 O'Neal 阅读(663) 评论(1) 推荐(0)
摘要:  Java虚拟机采用可达性分析算法来判断对象是否可以回收。可达性分析算法通过一系列的GC Roots对象作为起始点,向下搜索走过的路径称引用链,当一个对象到GC Roots没有任何的引用链时,证明对象是不可用的。 Java中,可作为GC Roots的对象: 虚拟机栈中引用的对象 阅读全文
posted @ 2019-07-21 00:22 O'Neal 阅读(258) 评论(0) 推荐(0)
摘要:运行时数据区   1. 程序计数器 (Program Counter)   每个线程独占自己的程序计数器。如果当前执行的方式不是native的,那程序计数器保存JVM正在执行的字节码指令的地址,如果是native的,那程序计数器的值是undefined。 &e 阅读全文
posted @ 2019-07-20 21:16 O'Neal 阅读(342) 评论(0) 推荐(1)