关于方法区的变化 1、 java7之前,方法区位于永久代(PermGen),永久代和堆相互隔离,永久代的大小在启动JVM时可以设置一个固定值,不可变; 2、 java7中,static变量从永久代移到堆中...元空间并不在虚拟机中,而是使用本地内存 jdk1.8新特性知识点: Lambda表达式 函数式接口 方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API 另外: 在...jdk1.8中对hashMap等map集合的数据结构优化。...hashMap数据结构的优化 原来的hashMap采用的数据结构是哈希表(数组+链表),hashMap默认大小是16,一个0-15索引的数组,如何往里面存储元素,首先调用元素的hashcode 方法...(锁分段机制),concurrentLevel,jdk1.8采用CAS算法(无锁算法,不再使用锁分段),数组+链表中也引入了红黑树的使用 详情请见---https://blog.csdn.net/qq
JDK 9引入了一种新的编译模式AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了JIT预热等各方面的开销。JDK支持分层编译和AOT协作使用。...JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。...字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。 JDK 和 JRE JDK是Java Development Kit,它是功能齐全的Java SDK。...例如,如果要使用JSP部署Web应用程序,那么从技术上讲,您只是在应用程序服务器中运行Java程序。那你为什么需要JDK呢?...因为应用程序服务器会将 JSP 转换为 Java servlet,并且需要使用 JDK 来编译 servlet。
步骤 1:定义一个可重复的注解类型。 ---- 1.2. 步骤 2:定义容器注解类型 ---- 1.3. 检索注解 ---- 有一些可用的反射的 API 可以用来检索注解。...可以返回单个注解的方法,比如 AnnotatedElement.getAnnotation(Class) ,由于请求的类型只有一个注解的时候才会返回单一注解。...如果有多个注解,你可以通过获取到他们的容器注解来得到他们。使用这种方法,之前的代码还是可以继续运行的。...注解可以被使用 0 次、1次,假如注解类型被添加了 @Repeatable 注解,则可以使用多次。可以使用源注解 @Target 限制注解可以使用的地方。...例如,你可以创建一个只能被用在方法和字段上的可重复的注解。仔细地设计你的注解类型,让使用注解的开发者感觉到它的灵活和强大。 2.
关于jdk环境安装的一些问题 jdk在自己电脑上安装完成之后,会有一个安装的目录,默认是放在C盘目录下,但最后放在其他盘符上,因为有的时候电脑要重装系统C盘中的文件会被清掉。...其实如果已经安装在C盘下,重装系统或换台电脑也没关系,也不用重新下载JDK去安装了,直接把安装好的JDK安装目录给移除来,放在重装系统的电脑或新电脑上就可以直接用了,然后再配置下环境变量 一般配置环境变量时...安装JDK的时候其实JDK中就自带了jre,但也可以默认安装例外的jre,默认情况下是自动安装的,例外的jre一般是跟JDK在同一目录下。如: ? ?...重新在电脑上安装JDK和直接从例外一台电脑上拷贝来的JDK的区别就是:重装的JDK会有注册表在电脑上,在联网的情况下回更新JDK。但移植过来的JDK不会更新。两者都是可以使用的。...当jdk目录改变时,只要改变JAVA_HOME对应的值即可!
文章目录 前言 一、池的概念 二、线程池是什么 三、JDK中线程池的使用 3.1 线程池的核心父接口 ExecutorService接口 3.2 Executors =》 线程池的工具类 3.3 ThreadPoolExector...方法终止后,表示当前用户不再使用此连接,就回收连接到连接池中,而不是直接销毁(同一个连接可以被多个用户使用多次,减少了每次创建连接和销毁连接的系统开销) 同样的,不同线程只是run方法的内容不同,线程的大致流程都是一样的...三、JDK中线程池的使用 描述线程池的核心类,最常用的一个子类- ThreadPoolExecutor,这个类的构造方法就是创建一个线程池的所有核心参数 3.1 线程池的核心父接口 ExecutorService...3.2 Executors =》 线程池的工具类 使用这个类就可以创建JDK内置的四大线程池 Java中类的命名规律 凡是类s =》 工具类 Arrays(数组工具类,copyOf,sort等等) Executors...(排队时间最长的任务) DisCardPolicy:丢弃新来的任务 四、线程池的工作流程: 如图所示: 拓展 阿里编码规约:尽量不要使用内置线程池,最好根据实际的业务需求,定制线程池自己的new ThreadPoolExecutor
可以在 .travis.yml 文件中定义使用的 JDK 版本。 在文件中: jdk: - openjdk8 在上面中定义了 JDK 的版本。...如希望使用 JDK 11 的版本的话,你可以定义为: jdk: - openjdk11 下面的代码,然后再提交代码到 CI 中进行编译。...然后通过 CI 的界面中进行查看,你可以看到 CI 已经使用更新后的版本。 然后你可以从构建 CI 的日志中查看编译的情况。...https://www.ossez.com/t/travis-jdk/781
最近在读《深入理解java虚拟机》第二版,在JDK1.8环境下遇到一个关于MethodHandle使用上的问题,在这里记录下。...https://github.com/floor07/essential-jvm (github jvm的读书笔记) 本文目录如下: 引子 java.lang.invoke简介 关于引子书上的解法 JDK1.8...简单使用方式 创建目标方法的MethodType对象,MethodType.methodType方法的第一个参数是返回值 ,之后是按目标方法接收的参数的顺序填写参数类型。 ...但是 **该解法在JDK1.8下不行**,运行结果是I’m father ? JDK1.8为什么跟预想的不一致? 为什么1.8跟预想的不一致?...当该工厂对象被查找类创建后,查找类的标识,安全信息将存储在其中。 查找类(或它的委托)将使用工厂方法在被查找对象上依据查找类的访问限制,创建method handles。
目前JDK出现的情况如下: 这里JavaJDK是有问题的,因为只有jre而没有JDK。正确做法是重新安装新的JDK。 正常的JDK下的目录是这样的: 选择jdk开头的文件夹就可以了。
* 他代表list被修改的次数(一般指 add,remove 次数。...* 这个变量,一般在是 iterator , list iterator 实现时用到的,并且在他们的 next,remove,add,previous 等方法中,会利用它决定是否抛出ConcurrentModificationException...具体在像add,remove方法中,增加modCount的值,每次调用加1。...return (E) elementData[lastRet = i];//lastRet 赋值本次的坐标。...由于 Iterator 对象不是线程安全的,在多线程中用it.remove()删除元素,同样可以抛出 ConcurrentModificationException异常 !
下面我们通过案例来看一下TreeSet的使用. 1、使用TreeSet)对String类型的数据进行存储,存储顺序默认按字母升序排序。...最后使用floor()方法获得集合中最大的元素小于或等于给定元素的值,并输出。...运行效果 说明: 1)关于floor()方法,对于intSet.floor(10),集合中有等于10的元素,所以输出结果为10;对于对于intSet.floor(2),集合中没有2,那么小于2的最大元素就是...运行效果 说明: 1)注意创建TreeSet)对象时,要指定Comparator接口的实现类作为参数 2)这里使用了pollFirst()方法,该方法比较特殊,可以返回元素,但是又把这个元素删除了,...该方法的使用方式与pollFirst()类似,小伙伴可以尝试使用 4)如果对age进行降序排序,可以将PersonComparator类的如下选中代码改为:o2.getAge()-o1.getAge()
(使用浏览器监视网络请求验证): 1、只能为 input、textarea、select三种类型的标签。...2、只有三种标签的value属性的值(select是选中项的value)才会提交给服务器。标签必须设定name属性(道理:没有name怎么拼网址i=5)。...如果要将标签的value属性值提交到服务器,则必须为标签设定name属性,提交到服务器的时候将会以“name=value”的键值对的方式提交给服务器。name是给服务器用的,id是给Dom用的。...4、当input=submit的时候,只有被点击的按钮(要有name)的value才会被提交(道理:否则我知道谁被点了?)。 5、放到form标签内。...id不能重复,name可以重复,重复的name的值都会被提交给服务器。 4、服务器端用context.Request["username"]来根据表单项的name来获得提交的属性值。
在iOS开发中,对于多线程,大多数开发者使用苹果提供的简单的GCD, 频繁的使用GCD,并发队列并不会去管理最大并发数,无限制提交任务给并发队列,会给性能带来问题。...for循环中使用block,并且需要block执行完成后继续执行后续代码 dispatch_group_t group = dispatch_group_create(); for (UIImage *
大家好,又见面了,我是你们的朋友全栈君。...当输入框被键盘挡住时,可以使用scrollIntoView让输入框回到视野 //一定要设置高度才会有效果 <
一般来说,我们会用time做这些事情,一个是,获取日期,一个是计算某段代码的运行时间。额,这是vs2008的。C++11有更好的精度。...clock_t单位是(ms),转为s 要/CLOCKS_PER_SEC(1000) #include #include #include 接着,使用的话
在ARC项目中使用 performSelector: 函数出现“performSelector may cause a leak because its selector is unknown”这样的警告...而使用 performSelector: 时ARC并不知道该方法的返回值是什么,以及该如何处理?该忽略?...: SuppressPerformSelectorLeakWarning([self performSelector:selector]) 这是对#pragma 一个作用的展现,想了解更多关于 #...pragma 在OC中的使用,请移步到我的这篇文章: 方法二: SEL selector = NSSelectorFromString([NSString stringWithFormat:@"forDrow...,算是比较底层的使用方法了。
本文主要介绍的是如何是Linux环境下安装JDK的,因为Linux环境下,很多时候也离不开Java的,下面笔者就和大家一起分享如何jdk1.8的过程吧。...]# 9、测试jdk是否安装成功 输入javac命令如果出现以下的文字就说明编译成功了(如果你之前安装centos7时使用的语言是英文,那出现的就是类似这样排版的英文) [root@itheima... -deprecation 输出使用已过时的 API 的源位置 -classpath 指定查找用户类文件和注释处理程序的位置 -cp...指定放置生成的本机标头文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding 指定源文件使用的字符编码...> 请确保使用的 API 在指定的配置文件中可用 -version 版本信息 -help 输出标准选项的提要
在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改。...选择 File 后,然后选择 Project Structure 然后需要在你的项目结构中首先安装不同的 JDK 版本。 选择项目(Project)后选择不同的 JDK 和不同的编译级别。...然后刷新你的项目在进行编译的时候,你会发现你的 IntelliJ 已经使用设置的新 JDK 版本进行编译项目了。 请参考链接有关具体的问答内容:IntelliJ 更改项目使用的 JDK 版本
在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改。...然后需要在你的项目结构中首先安装不同的 JDK 版本。 ? 选择项目(Project)后选择不同的 JDK 和不同的编译级别。...然后刷新你的项目在进行编译的时候,你会发现你的 IntelliJ 已经使用设置的新 JDK 版本进行编译项目了。 ? 请参考链接有关具体的问答内容:IntelliJ 更改项目使用的 JDK 版本
一、WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1、 使用JDK开发(1.6及以上版本) 2、使用CXF框架开发(工作中) 二、...使用JDK开发WebService 2.1、开发WebService服务器端 1、定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法...关于发布WebService主要就是通过javax.xml.ws.Endpoint类提供的静态方法publish进行发布,如果是普通的java项目,那么可以专门写一个类用于发布WebService,如果是...2.2、开发WebService客户端 1、借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下,如下图所示: ? ...以上就是使用JDK开发WebService的相关内容。
Ubuntu18.04 安装Jdk1.8 环境信息: OS:Ubuntu18.04 JDK:1.8 1.去官网下载jdk 2.解压 将下载到本地的包解压 tar -zxvf jdk-8u171-...linux-x64.tar.gz 3.移动 你可以将文件从下载目录 我是 挪到/usr/local下 sudo mv jdk1.8.0_171 /usr/local/jdk1.8 4.环境变量 方案一...:修改全局配置文件,作用于所有用户:vim /etc/profile 如果是新手安装,不会使用vim的话附上使用教程vim的使用 export JAVA_HOME=/usr/local/jdk1.8...并从/etc/profile.d目录的配置文件中搜集shell的设置. ~/.bashrc 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取....第一个指令是为所有用户都可以使用jdk,那就配置/ect/profile文件 第二个是为登录的用户设置可以使用jdk** 上面有些信息如果理解错误,还请指出以便更正,多多指教
领取专属 10元无门槛券
手把手带您无忧上云