jvm原理
文章平均质量分 86
CringKong
高级语言生产,底层思维学习
展开
-
入侵JVM?Java Agent原理浅析和实践(下)
声明:本文首发于京东零售技术公众号,为博主本人撰写投稿。运行时修改字节码了解到上述机制以后,我们可以通过在目标JVM运行时对其中的类进行重新定义,做到运行时插桩代码。我们知道ASM是一个字节码修改框架,因此就可以在类转换器中,对原本类的字节码进行修改,然后再对这个类进行重定义(retransform)。首先我们实现ClassFileTransformer接口,前文中在transform方法中并没有对于字节码进行修改,只是单纯的打印了一些信息,既然需要对字目标类的节码进行修改,我们需要了解下Class原创 2021-10-19 10:28:49 · 461 阅读 · 1 评论 -
入侵JVM?Java Agent原理浅析和实践(中)
声明:本文首发于京东零售技术公众号,为博主本人撰写投稿。JVM运行时Agent在JDK1.6版本中,SUN更进一步,提供了可以在JVM运行时代理的能力,和启动时代理类似,只需要满足:JAR包的MANIFEST.MF清单文件中定义Agent-Class属性,指定一个类,加入Can-Redefine-Classes 和 Can-Retransform-Classes 选项。JAR包中包含清单文件中定义的这个类,类中包含agentmain方法,方法逻辑可以自己实现运行时Agent可以在JVM运行时动原创 2021-10-19 10:18:41 · 536 阅读 · 0 评论 -
入侵JVM?Java Agent原理浅析和实践(上)
声明:本文首发于京东零售技术公众号,为博主本人撰写投稿。前言:在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信息,查看变量值,甚至加入断点控制,还有我们平时使用JDK自带的JMAP、JSTACK等工具,可以在JVM运行时动态的dump内存、查询线程信息,甚至一些第三方的工具,比如说京东内部使用的JEX、pfinder,阿里巴巴的Arthas,优秀的开源的框架skywalking等等,也可以做到这些,那么这些工具究竟是通原创 2021-10-19 10:11:42 · 1282 阅读 · 1 评论 -
编译器重排序
在一些讲Java并发编程的书中,经常会出现JMM内存模型、volatile关键字、重排序、乱序执行等字眼,导致了有些刚开始学习Java并发编程的小伙伴一脸懵逼:这都是啥啊?文章目录1. 什么是编译器重排序1.1 定义1.2 举个例子1.3 重排序原因1.4 不仅仅是重排序2. 如何禁止?2.1 编译器屏障2.2 禁止重排序2.3 禁止寄存器存/取值2.4 volatile(C/C++)3. 结束...原创 2019-08-20 10:51:06 · 2762 阅读 · 3 评论 -
关于equals和hashCode,看这一篇真的就够了
这几天在尝试手撸一个类似Lombok的注解式代码生成工具,用过Lombok的小伙伴知道,Lombok可以通过注解自动帮我们生产equals()和hashCode()方法,因此我也想实现这个功能,但是随着工作的深入,我发现其实自己对于equals()和hashCode()的理解,也处在一个很低级的阶段。因此痛定思痛,进行了一番深入学习,才敢来写这篇博客。文章目录1、equals在Java中含义2...原创 2019-04-21 14:27:54 · 4553 阅读 · 3 评论 -
Java并发--Java中的CAS操作和实现原理
这几天准备梳理一下Java多线程和并发的相关知识,主要是系统的梳理一下J.U.C包里的一些东西,特别是以前看过很多遍的AQS和实现类,还有各种并发安全的集合类。最重要的就是这个CAS操作,可以说是整个J.U.C包的灵魂之处。1.什么是CAS?2.JAVA中的CAS操作实现原理3.concurrent包中CAS的应用4.小结1.什么是CAS? CAS:Compare...原创 2018-06-01 10:04:22 · 8652 阅读 · 1 评论 -
Java多线程--正确理解interrupt()、interrupted()和isInterrupted()
1.interrupt()2.isInterrupted()3.interrupted()1.interrupt()理解这个函数,可以首先从它自己的JavaDoc入手。 Interrupts this thread. Unless the current thread is interrupting itself, which is always pe...原创 2018-05-31 16:57:56 · 5165 阅读 · 0 评论 -
Java并发--ReentrantLock实现分析
ReentrantLock是基于AQS实现的可重入独占锁,如果还不了解AQS实现原理的同学可以先去AQS原理分析学习一哈。如果文章中由任何不妥或者谬误之处,请批评指正。公平锁or非公平锁1. 非公平锁1.1 非公平锁的获取2. 公平锁2.1 公平锁的获取3. 解锁过程公平锁or非公平锁ReentrantLock核心功能的实现,依赖于继承AQS类实现的...原创 2018-06-05 18:43:07 · 310 阅读 · 0 评论 -
Java线程和操作系统线程的关系
1.操作系统线程模型1.1 线程实现在用户空间下 当线程在用户空间下实现时,操作系统对线程的存在一无所知,操作系统只能看到进程,而不能看到线程。所有的线程都是在用户空间实现。在操作系统看来,每一个进程只有一个线程。过去的操作系统大部分是这种实现方式,这种方式的好处之一就是即使操作系统不支持线程,也可以通过库函数来支持线程。我们换一种通俗的方式来讲解这段话,首先就是在这在模型下,程序员需要自己实原创 2018-04-18 18:06:01 · 28278 阅读 · 21 评论 -
Maven补全之生命周期(Lifecycle)
Maven生命周期基础概念 Maven是基于生命周期构建的,一个Maven项目的构建是已经被清晰定义的过程。对于我们使用Maven构建项目来说,POM.xml文件可以确保我们得到自己想要的项目(项目名,包依赖,版本号等等)Maven有三种内置的构建生命周期:default,clean和sitedefault(默认)生命周期会处理项目的部署,clean(清理)生命周期负责项目的清理,site生命原创 2018-03-23 11:02:46 · 513 阅读 · 0 评论 -
javac编译器工作原理(2)java语言的编译过程
Javac编译器工作原理(2)Java语言的编译过程 明白了高级语言到低级语言的编译原理,我们来了解一下Javac编译器是怎么把Java语言,编译成JVM字节码首先我们来了解一下,Javac编译器 Javac编译器–维基百科 javac(发音为“java-see”)是Oracle Corporation的Java Development Kit(JDK)中包含的主要Java编译器。 Ma原创 2018-03-03 12:50:43 · 2466 阅读 · 0 评论 -
javac编译器工作原理(1)高级语言的编译原理
javac编译器工作原理(1)高级语言的编译原理 众所周知,Java语言有自己的语言规范,这个规范描述了Java语言有那些词法和语法的,有繁多的关键字,有固定的语法,而Java语言本质意义上是一门高级语言,这种语言如何被计算机理解并由CPU执行,就要倚靠JVM和JVM内置的编译器来完成。首先我们来了解一下,高级语言是如何编译成为低级语言并由计算机执行的计算机是不能直接运行高级语言代码的,CPU原创 2018-03-03 00:41:53 · 779 阅读 · 0 评论 -
Java增强for循环--foreach深入探讨
首先我们来认识Java中的foreach,foreach也被称为增强的for循环我们来看一下他的基本用法对于基本数据类型的数组遍历有如下用法: int[] arr = new int[100]; // foreach写法 for (int i : arr) { System.out.println(i); ...原创 2018-03-09 17:02:31 · 986 阅读 · 0 评论