jdk安装下载jdk由于现在主流就是jdk1.8,所以这里就下载jdk1.8进行演示。官方下载地址:https://www.oracle.com/java/technologies/downloads/#java8-windows。官方下载需要注册oracle账号,国内下载有可能速度慢,若不想注册账号且需要更快的下载速度,可以通过国内的镜像网站进行下载。这里提供一个华为镜像网站:https://repo.huaweicloud.com/java/jdk/.安装jdk打开运行下载好的安装包。这里建议更改一下安装路径,选择一个容易记住的位置,可以专门创建一个目录用来存放开发环境。这里也可以使用默认
一、前言我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么进行对这个java文件解析的!我们可以使用JDK自带的javap命令来进行反编译,反编译出来的如果看不太明白,可以使用Jad工具来配合使用。还有就是把jar包完全反编译为我们写的代码的是GD-GUI,有兴趣可以去官网看一下哈,小编这里不做进一步说明。JD-GUI官网下载地址。我们今天以Stringstring=newString("wang")+newString("zhen");,这条语句在底层是怎么创建的来深入理解jvm底层,同时也对反编译有进一步的了
一、前言我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么进行对这个java文件解析的!我们可以使用JDK自带的javap命令来进行反编译,反编译出来的如果看不太明白,可以使用Jad工具来配合使用。还有就是把jar包完全反编译为我们写的代码的是GD-GUI,有兴趣可以去官网看一下哈,小编这里不做进一步说明。JD-GUI官网下载地址。我们今天以Stringstring=newString("wang")+newString("zhen");,这条语句在底层是怎么创建的来深入理解jvm底层,同时也对反编译有进一步的了
摘要:JVM优化的目标就是:尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。本文分享自华为云社区《千万不要在生产环境使用这个版本的JDK,这不?内存又溢出了!快要裂开了!(建议收藏)》,作者:冰河。小伙伴的疑问问题确定排查问题的整个过程相当耗时,这里,我就直接说定位到的问题吧。后面,我会单独写一篇详细的排查问题过程的文章!在排查问题的过程中,我发现这位小伙伴使用的JDK还是1.6版本。开始,我也没想那么多,继续排查他写的代码,也没找出什么问题。但是一旦启动生产环境的程序,没过多久,JVM就
摘要:JVM优化的目标就是:尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。本文分享自华为云社区《千万不要在生产环境使用这个版本的JDK,这不?内存又溢出了!快要裂开了!(建议收藏)》,作者:冰河。小伙伴的疑问问题确定排查问题的整个过程相当耗时,这里,我就直接说定位到的问题吧。后面,我会单独写一篇详细的排查问题过程的文章!在排查问题的过程中,我发现这位小伙伴使用的JDK还是1.6版本。开始,我也没想那么多,继续排查他写的代码,也没找出什么问题。但是一旦启动生产环境的程序,没过多久,JVM就
get逻辑:HashMap数据结构为数组加链表加红黑树、只有当链表数量大于8时、才将链表转换为红黑树、时间复杂度由链表的O(N)转换为红黑树的O(logN)//主要看getNode下的方法、传入key的hash值和keypublicVget(Objectkey){Nodee;return(e=getNode(hash(key),key))==null?null:e.value;}//返回一个Node对象、包含了key和value、在get方法中在返回value值finalNodegetNode(inthash,Objectkey){//tab:Node对象数组Node[]tab;//first
get逻辑:HashMap数据结构为数组加链表加红黑树、只有当链表数量大于8时、才将链表转换为红黑树、时间复杂度由链表的O(N)转换为红黑树的O(logN)//主要看getNode下的方法、传入key的hash值和keypublicVget(Objectkey){Nodee;return(e=getNode(hash(key),key))==null?null:e.value;}//返回一个Node对象、包含了key和value、在get方法中在返回value值finalNodegetNode(inthash,Objectkey){//tab:Node对象数组Node[]tab;//first
1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件
1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件
简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf