
jvm
文章平均质量分 94
JQW_YNU
无
展开
-
Java 内存区域和GC机制
目录Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。...转载 2018-09-24 13:19:53 · 270 阅读 · 0 评论 -
[JVM]类(Class)文件结构
Java虚拟机类文件结构一、无关性的基石java通过java虚拟机实现一次编写,到处运行java 虚拟机不和包括java在内的任何语言绑定,它只与“class 文件”这种特定的二进制文件格式关联,class文件包含了Java虚拟机指令集和符号表以及其他辅助信息。二、Class类文件的结构1、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在...转载 2018-10-04 20:31:59 · 204 阅读 · 0 评论 -
[JVM]字节码_i++与++i的区别和效率问题
通过jvm编译指令,来解析为何i++与++i运算过程的区别i++ public void testFun(){ int y = 13; int x = y++; }对应指令结构public void testFun(); descriptor: ()V flags: (0x0001) ACC_PUBLIC C...原创 2018-10-04 20:40:12 · 303 阅读 · 0 评论 -
[JVM]字节码_JVM处理String对象使用”+”连接字符串的方式
String对象是不可变的,本文通过String的拼接翻译成的字节码,查看具体的原理,并且和显示的使用StringBuilder进行拼接生成的字节码进行对比,总结基本的使用原则。String对象是不可变的,对一个String进行处理,无论是进行追加,转换大小写之类的,都会生成一个新的字符串。同时不可变性会带来一定的效率问题。下面通过一个追加字符串的字节码来了解下Stringwho="art...转载 2018-10-04 20:45:17 · 311 阅读 · 0 评论 -
[JVM]字节码_finally块对return返回值的影响
直接进入主题。看如下代码:public int test(){ int i=0; try { i=1; return i; } catch (Exception e) { i=2; return i; }finally{ i=3; }}相信有点经验的程序员一眼就能说...转载 2018-10-04 21:13:35 · 401 阅读 · 0 评论 -
[JVM]深入解析String#intern
引言在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String...转载 2018-10-05 10:46:28 · 215 阅读 · 0 评论 -
[JVM]35个java代码性能优化总结
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上 线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考...转载 2018-10-05 11:01:29 · 739 阅读 · 0 评论 -
[JVM]类加载机制及反射
一、Java类加载机制1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以...原创 2018-10-05 17:55:57 · 388 阅读 · 0 评论 -
[JVM]深入类加载机制详解
如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代...原创 2018-10-05 19:59:52 · 180 阅读 · 0 评论 -
[JVM]类加载的过程——解析
解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,在Class文件中他以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量飙戏那,那解析阶段中所说的直接引用与符号引用又有什么关联呢?符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形...转载 2018-10-05 22:38:15 · 809 阅读 · 0 评论 -
[JVM]静态分派与动态分派
方法调用并不等于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,但是Class文件的编译过程不包括传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相对于之前说的直接引用)。这个特性给Java带来了更强大的动态...转载 2018-10-06 22:55:44 · 357 阅读 · 0 评论 -
[JVM]虚拟机动态类型语言支持
这篇博客是根据《深入理解java虚拟机》的讲解和本人对动态类型语言的一些认识,来深度剖析一下java虚拟机对动态类型语言的支持!JDK存在js执行引擎(一)什么是动态类型语言在讲解java虚拟机对动态类型语言支持之前,我们首先要弄明白动态类型语言是什么?它与java语言、java虚拟机有什么关系?那么接下来先回答第一个问题,什么是动态类型语言:动态类型语言的关键特征是它的类型检查的...转载 2018-10-06 22:59:49 · 440 阅读 · 0 评论 -
[JVM]垃圾回收器
需要提前了解的知识:JVM内存模型 JVM垃圾回收算法HotSpot虚拟机所有的垃圾收集器如下图:HotSpot 所有垃圾收集器上面有7种收集器,分为部分,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。新生代的收集器使用复制算法,老年代使用并发标记清除(CMS)或标记-整理算法。Stop The WorldJava...转载 2018-10-04 20:16:19 · 215 阅读 · 0 评论 -
[JVM]字节码_基于栈的解释器执行原理
通过下面这段代码来解释JVM基于栈的执行原理 public static int add(int a, int b) { int c = 0; c = a + b; return c; }查看字节码的命令:javap -verbose ByteCode.classadd方法的字节码如下: public static int add(int, int);...原创 2018-10-04 20:12:38 · 621 阅读 · 0 评论 -
[JVM]Tomcat调优
Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈.幸好Tomcat还有很多的提升空间.下文介绍一下Tomcat优化,可以分为内存,线程,IO.一:Tomcat内存优化,启动时告诉JVM我要一块大内存(调优内存是最直接的方式)Windows 下的catalina.batLinux...原创 2018-10-04 19:39:30 · 179 阅读 · 0 评论 -
jdk1.8 lambda
将数组转化为list:Arrays.asList(atp);lambda实现数据过滤, 并行操作, 循环输出案例:1.需求:打印输出已经排好序的字符串数组中长度大于20 ,并且为其添加hello ; 数据源:String[] players = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka...原创 2018-09-24 16:33:19 · 527 阅读 · 0 评论 -
[JVM]深入对象的创建和内存分配
1、对象的创建 java是面向对象的语言,因此对象的创建无时无刻都存在。在语言层面,使用new关键字即可创建出一个对象。但是在虚拟机中,对象创建的创建过程则是比较复杂的。 首先,虚拟机运到new指令时,会去常量池检查是否存在new指令中包含的参数,比如new People(),则虚拟机首先会去常量池中检查是否有People这个类的符号引用,并且检查这个类是否已经被加载了,如果没有则...原创 2018-10-02 17:24:02 · 149 阅读 · 0 评论 -
[JVM]深入java对象结构
先转载一篇文章作为开头,因为讲的非常详细,我就简单加工下放到这里:对象结构在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。下图是普通对象实例与数组对象实例的数据结构:(Header)对象头HotSpot虚拟机的对象头包括两部分信息:MarkWord 第一部分mar...原创 2018-10-02 19:07:58 · 944 阅读 · 0 评论 -
[JVM]深入理解垃圾回算法
一、 技术背景你要了解吧 二、 哪些内存需要回收? 2.1 引用计数算法 2.1.1 算法分析 2.1.2 优缺点 2.1.3 是不是很无趣,来段代码压压惊 2.2 可达性分析算法 2.3 Java中的引用你了解多少 2.4 对象死亡(被回收)前的最后一次挣扎 2.5 方法区如何判断是否需要回收 三、常用的垃圾收集算法 3.1 标记-清除算法 ...转载 2018-10-02 20:28:27 · 229 阅读 · 0 评论 -
[JVM]虚拟机监控工具(命令行)
1.jps (Java Virtual Machine Process Status Tool) 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。 jps [options] [hostid] ...转载 2018-10-03 18:45:31 · 386 阅读 · 0 评论 -
[JVM]虚拟机监控工具(可视化)
1、Jconsole 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。 (1)启动 目录在 jdk\bin\jc...转载 2018-10-03 18:46:44 · 6462 阅读 · 0 评论 -
[JVM]内存分配策略
1、优先分配到edenpackage 深入理解java虚拟机; public class 对象优先分配到eden区 { /** * 1M的内存大小 */ private static final int _1MB = 1024 * 1024; /** * jvm参数设置:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+Print...原创 2018-10-03 19:00:04 · 323 阅读 · 0 评论 -
[JVM]生产环境下jvm调优概述
JVM相关的典型面试问题:Java生产环境下性能监控与调优详解 生产环境发生了内存溢出如何处理? 生产环境应该给服务器分配多少内存合适? 如何对垃圾收集器的性能进行调优? 4.生产环境CPU负载飙高该如何处理?5.生产环境应该给应用分配多少线程合适?6.不加log如何确定请求是否执行了某一行代码?7.不加log如何实时查看某个方法的入参与返回值?8...转载 2018-10-04 12:13:31 · 1854 阅读 · 1 评论 -
[JVM]Java生产环境下性能监控与调优详解_Btrace
本章关键词:BTrace、拦截、注意事项一、入门1.做什么的?可以在应用程序不重启,不修改的情况下,正在运行的情况下,动态的修改字节码,达到监控调试的目的 可以动态的向目标应用程序的字节码注入追踪代码 用到的技术JavaComplierApi、JVMTI、Agent、Instrumentation+ASM2.安装到官网中下载相应版本 新建环境变量BTRACE_H...转载 2018-10-04 12:33:51 · 526 阅读 · 0 评论 -
[JVM]Java生产环境下性能监控与调优_参考文档链接
第二章jdk8工具集https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroubleshootinghttps://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/jpshttps://docs.oracle.com...原创 2018-10-04 12:50:12 · 379 阅读 · 0 评论 -
[JVM]JDK8新特性 Java调用js
<span style="font-family: Arial, Helvetica, sans-serif;">Java 8提供了新的Nashorn JavaScript引擎,使得我们可以在JVM上开发和运行JS应用。Nashorn 引擎是javax.script.ScriptEngine的另一个实现版本,这类Script引擎遵循相同的规则,</span><...转载 2018-10-06 23:01:59 · 1227 阅读 · 0 评论