JDK

通用软件快速开发平台对企业信息化的影响

天大地大妈咪最大 提交于 2020-12-09 18:56:19
关于开发平台 开发平台是指以某种编程语言或者某几种编程语言为基础,开发出来的一个软件,而这软件不是一个最终的软件产品,它是一个包含了各种基础组件的二次开发软件框架。在这个平台上,可以进行各种软件产品的开发,并且在开发的过程中,不需要像以往的编程方式一样编写大量的代码,而是对一些基础的功能仅需要配置,或者写少量代码便可以完成一个业务系统的开发。 最初的软件开发,大都采用记事本进行程序编写,运用JDK、MFC等提供的API自己编写代码来完成想要的功能,编写完之后再编译成可执行的文件,然后运行。 这种早期的开发方式,虽然通俗,但对开发人员要求极高,并且不便捷。于是,慢慢的编程人员开始寻求更加高效的开发方式,于是诸如Eclipse、JBuilder、VC++、Visual Stuido等一系列的开发工具便出现市面上。这些工具的出现,大大方便了开发人员的编程工作,减少了编程人员很多不必要的麻烦,像包括编译、异常处理、发布、模拟运行等操作,都可以在这些开发工具上完成。 但是,随着时间的推移,编程人员发现,即使有这么好的开发工具,在开发的过程中,依然要写很多很多的代码,而且仔细的分析来看,很多代码基本上都是重复的编写,功能大同小异。于是,他们便开始琢磨另一种更为方便高效的开发工具,比如说:我们可以将很多重复的代码封装起来,然后需要用到的时候自行调用?或者是我们可以搭出一个基本的开发框架

Java容器(List、Set、Map)知识点快速复习手册(中)

余生长醉 提交于 2020-12-09 10:35:04
前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 上篇:主要为容器概览,容器中用到的设计模式,List源码 中篇:Map源码 下篇:Set源码,容器总结 其它知识点复习手册 Java基础知识点面试手册(上) Java基础知识点面试手册(下) Java容器(List、Set、Map)知识点快速复习手册(上) HashMap http://wiki.jikexueyuan.com/project/java-collection/hashmap.html 源码分析: https://segmentfault.com/a/1190000014293372 关键词 初始容量16 扩容是2倍,加载因子0.75 头插法 0桶存放null 从 JDK 1.8 开始,一个桶存储的链表长度大于 8 时会将链表转换为红黑树(前提:键值对要超过64个) 自动地将传入的容量转换为2的幂次方 保证运算速度:确保用位运算代替模运算来计算桶下标。hash& (length-1)运算等价于对 length 取模。 hash均匀分布:数据在数组上分布就比较均匀,并且能够利用全部二进制位,也就是说碰撞的几率小, table数组+Entry []链表(散列表),红黑树 扩容操作需要把键值对重新插入新的 table 中,重新计算所有key有特殊机制(JDK1.8后) 存储结构

Java环境变量配置详解-懂你的人

你离开我真会死。 提交于 2020-12-08 08:29:54
我的是win10系统,其他系统也差不多,相信你能找到环境配置页面。 1. 添加JAVA_HOME,值为jdk的路径,如C:\Program Files\Java\jdk1.8.0_171,你要换成自己的路径。那么 JAVA_HOME是什么意思,它就是一个变量。跟Java里的变量是一样的意思,后面用的到。 2. 添加CLASSPATH变量,值为 .;%JAVA_HOME%\jre\lib。为什么要这样呢?因为Java编译工具编译你的 程序的时候将会根据这个路径去找需要用到的类文件。如String类,System类。. 表示当前路径,一般是你 自己写的类就是在当前路径,把它写在前面,电脑会先在当前路径下找相应的文件,没找到再去lib里面 找,后面的lib就是java的class文件。你用到的String类文件就是根据这个路径去找的。但是有时候你们用 eclipse的时候发现我没有配置后面的lib也可以,这是为什么呢?因为eclipse中默认的就帮你配置好了,你 可以去builpath里面去改。builpath(不懂,自己百度一下),就是查看你该项目用的类库的地方。这个lib 也是平常所说的Java运行环境。而jdk是开发工具包。 3. 配置PATH,path是什么呢?比如你在配置后java环境变量之后,你会去dos下用java -version命令查看java 的版本

jvm解读

我与影子孤独终老i 提交于 2020-12-08 08:29:27
jvm是实现java 的平台无关性的关键点,Java平台在不同平台上运行时不需要重新编译,jvm屏蔽了与具体平台相关信息,使得java语言编译程序只需生成在jvm上运行的目标代码,也就是字节码就可以了。 原理 java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。 JVM执行程序的过程 : I.加载.class文件 II.管理并分配内存 III.执行垃圾收集 JRE(java运行时环境)包含JVM的java程序的运行环境 [1] JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。 JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也叫虚拟计算机 指令系统 JVM指令系统同其他计算机的指令系统极其相似。Java指令也是由 操作码 和操作数两部分组 成。操作码为8位二进制数, 操作数 紧随在操作码的后面,其长度根据需要而不同。操作码用于指定一条指令操作的性质 体系结构 每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个JVM又包括方法区

Ubuntu16.04编译OpenJDK7u40

泪湿孤枕 提交于 2020-12-08 05:24:05
下图是OpenJDK6、OpenJDK7、OpenJDK7u和OpenJDK8这几个项目之间的关系: 下面把编译步骤记录下来: 编译环境 Ubuntu 16.04.4 LTS jdk版本 openjdk-7u40-fcs-src-b43-26_aug_2013.zip 1 Build Environments 1.1 编译环境:Ubuntu 16.04 vagrant@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial 1.2 配置apt-get源 # http://wiki.ubuntu.org.cn/源列表 vi /etc/apt/sources.list 参考模板,把下面的内容写入到/etc/apt/sources.list deb http://mirrors.sohu.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.sohu.com/ubuntu/ xenial-security main restricted universe

Java基础整理(全是干货)

不问归期 提交于 2020-12-08 04:38:08
一.hashMap与hashTable与ConcurrentHashMap: 1.HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。<Dictionary类是一个已经被废弃的类> 2.Hashtable既不支持Null key也不支持Null value。HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null。 3.Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现 同步,HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。如果想要线程安全的 HashMap,可以通过Collections类的静态方法synchronize dMap获得线程安全的HashMap。 <Map map = Collections.synchronizedMap(new HashMap())>; 4.hashMap的数据结构:HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置。 5

又一起线上事故,线程池千万别乱用!

不想你离开。 提交于 2020-12-08 03:55:52
Java技术栈 www.javastack.cn 打开网站看更多优质文章 在高并发、异步化等场景,线程池的运用可以说无处不在。 线程池从本质上来讲,即通过空间换取时间,因为线程的创建和销毁都是要消耗资源和时间的,对于大量使用线程的场景,使用池化管 理可以延迟线程的销毁,大大提高单个线程的复用能力,进一步提升整体性能。 今天遇到了一个比较典型的线上问题,刚好和线程池有关,另外涉及到死锁、jstack命令的使用、JDK不同线程池的适合场景等知识点,同时整个调查思路可以借鉴,特此记录和分享一下。 01 业务背景描述 该线上问题发生在广告系统的核心扣费服务,首先简单交代下大致的业务流程,方便理解问题。 绿框部分即扣费服务在广告召回扣费流程中所处的位置,简单理解:当用户点击一个广告后,会从C端发起一次实时扣费请求(CPC,按点击扣费模式),扣费服务则承接了该动作的核心业务逻辑:包括执行反作弊策略、创建扣费记录、click日志埋点等。 02 问题现象和业务影响 12月2号晚上11点左右,我们收到了一个线上告警通知: 扣费服务的线程池任务队列大小远远超出了设定阈值,而且队列大小随着时间推移还在持续变大。详细告警内容如下: 相应的,我们的广告指标:点击数、收入等也出现了非常明显的下滑,几乎同时发出了业务告警通知。其中,点击数指标对应的曲线表现如下: 该线上故障发生在流量高峰期

Java环境变量的配置(图文详解)

本小妞迷上赌 提交于 2020-12-08 02:30:32
Java环境变量的配置(图文详解) 第一步:下载并安装JDK 第二步:配置环境变量 第三步:检验JDK是否安装配置好 Oracle 账号注册 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 第一步:下载并安装JDK (一)下载JDK 官方下载链接: https://www.oracle.com/java/technologies/javase-downloads.html . 微云链接: https://share.weiyun.com/GEu62jfP 看清楚自己需要的版本,我这里以下载Java8(1.8)版本做演示 1.进入官网,选择Java SE8版本 2.找到Java SE Development Kit 8u271下的Windows 64位版JDK 3.接受协议并下载JDK (二)安装JDK JDK安装完成。 第二步:配置环境变量 这里提供Win7的环境变量配置,Win10依葫芦画瓢 1.右键 “此电脑/计算机” 选择 “属性”,选择高级系统设置 2.新建 JAVA_HOME 变量 3.在Path变的末尾添加: ;%JAVA_HOME%\bin; 4.确定退出。至此,JDK的安装配 第三步:检验JDK是否安装配置好 1

【Java虚拟机】堆内存配置常用参数

北城以北 提交于 2020-12-08 00:18:29
1 常用参数说明 -Xms:初始堆内存空间大小(默认为物理内存的1/64) -Xmx: 最大堆内存空间大小(默认为物理内存的1/4) -Xmn:设置新生代大小(初始值和最大值) -XX:NewRatio:配置新生代与老年代在堆中的结构占比,默认是2,即新生代:老年代为1:2 -XX:SurvivorRatio:设置新生代中Eden和S0S的空间比例 这里的Survivor区域不能设置太小,因为如果小到不能存放所有幸存者,会导致对象直接进入老年代,会导致MiorGC和分带思想都失去本来意义。 这里的Eden区也不能太小,因为Eden空间总是不够用的时,会频繁触发Minor GC,从而影响整体性能。。 -XX:MaxTenuringThreshold:设置新生代垃圾的最大年龄 -XX:+PrintGCDetails:打印详细的GC处理信息 -XX:+PrintGC:打印GC简要信息 -XX:HandlePromotionFailure:是否设置空间分配担保 在发生MinorGC之前,虚拟机会 检查老年代最大可用空间,是否大于新生代所有对象的总空间 1. 如果大于,则此次Minor GC是安全的 2. 如果小于,则有剩余空间不足以存储所有存活的对象的风险,接下在怎么处理,需要看虚拟机参数-XX:HandlePromotionFailure设置是否允许担保失败: 2.1 如果允许担保失败

jdk8操作ldap 636端口一直报错

做~自己de王妃 提交于 2020-12-07 20:53:04
jdk发行说明 我写点给后来的人看吧:如果你用的jdk是1.8.0_181及以后用636是连接不上ldap的,因为jdk增加了ldap端到端识别算法,具体可见 https://java.com/zh_CN/download/faq/release_changes.xml ,解决办法是在运行jvm的时候加上参数:-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true,在idea中就在项目的configuration中的vm options中加上就可以了。 更改: 改进 LDAP 支持 已在 LDAPS 连接上启用端点识别。 为提高 LDAPS(TLS 上的安全 LDAP)连接的强健性,默认情况下已启用端点识别算法。 请注意,可能在一些情况下,以前能够成功连接到 LDAPS 服务器的一些应用程序可能不再能够成功连接。如果此类应用程序认为合适的话,它们可能会使用新系统属性禁用端点识别: com.sun.jndi.ldap.object.disableEndpointIdentification 。 定义此系统属性(或者将它设置为 true )可禁用端点识别算法。 JDK-8200666(非公共) 来源: oschina 链接: https://my.oschina.net/qiaojj/blog/4779279