OpenJDK

JVM解毒——JVM与Java体系结构

北战南征 提交于 2020-02-26 23:23:26
你是否也遇到过这些问题? 运行线上系统突然卡死,系统无法访问,甚至直接OOM 想解决线上JVM GC问题,但却无从下手 新项目上线,对各种JVM参数设置一脸懵逼,直接默认,然后就JJ了 每次面试都要重新背一遍JVM的一些原理概念性东西 这段广告语写的好,趁着在家办公学习下JVM,先列出整体知识点 点赞+收藏 就学会系列,文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 Java开发都知道JVM是Java虚拟机,上学时还用过的VM也叫虚拟机,先比较一波 虚拟机与Java虚拟机 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为 系统虚拟机 和 程序虚拟机 。 Visaual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台 程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令 JVM 是什么 JVM 是 Java Virtual Machine ( Java虚拟机 )的缩写, JVM 是一种用于计算设备的 规范 ,它是一个 虚构 的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java虚拟机是二进制字节码的运行环境,负责装载

CentOS-配置JDK(压缩包)

纵然是瞬间 提交于 2020-02-26 19:26:36
卸载openjdk $ rpm -qa | grep jdk 以上命令用来检查linux上是否安装openjdk,如果安装需要将其全部卸载掉,卸载命令: $ rpm -e --nodeps java-1.8.x-openjdk-headless-1.8.xxxxxxx.x86_64 下载jdk 从oracle官网下载64为的linux版本的jdk,如jdk-8u191-linux-x64.tar.gz JDK下载地址 将下载好的JDK压缩包上传到linux的/usr/java目录下进行解压,解压命令: $ mkdir -p /usr/java $ tar -zxvf jdk-8u191-linux-x64.tar.gz 配置环境变量 $ vim /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_191 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 保存后刷新profile文件,命令如下所示: $ source /etc/profile 查看JDK版本 $ java -version 来源: oschina 链接: https://my

如何优雅的学习JVM,终结篇(六)

ε祈祈猫儿з 提交于 2020-02-26 16:41:51
一、如何计算一个对象占用的内存大小? 我们在编写代码的过程中会创建大量的对象,有没有考虑到底某个对象占用了多少内存呢? 在C/C++中,我们可以通过sizeof()函数来计算一个变量或者类型所占用的大小,然而在Java中并没有这样的系统调用,那么在Java中如何实现类似的计算对象占用的内存大小呢?Java对象的内存结构,我们在前面的章节也进行了学习,它包括 对象头(标记位、对象指针)、实例数据、对齐填充 。那么我们只要按照顺序计算出各个区域所占用的内存并求和就可以了。其实仔细想想肯定没有这么简单,其中还有很多细节问题需要考虑。 对象头 在不开启JVM对象头压缩的情况下: 32位 JRE中一个对象头大小是 8个字节 (4 + 4) 64位 JRE中则是 16个字节 (8 + 8) 实例数据 成员变量主要包括两种:基本类型和引用类型,非静态成员变量所占用的数据。在确定JRE运行环境中,基本类型和引用类型占用的内存大小都是确定的,因此需要简单通过反射做个加法似乎就可以了。但是实际情况不是你想的这样简单,让我们来写代码测试一下吧。 通过jol工具可以查看到一个对象的实际内存布局,我们使用OpenJDK,提供了JOL包, 官网: http://openjdk.java.net/projects/code-tools/jol/ POM依赖: <dependency> <groupId>org

jenkins的docker自定义镜像

你说的曾经没有我的故事 提交于 2020-02-26 10:19:12
下载openjdk, maven 等到目录中。 #Dockerfile FROM jenkins/jenkins:lts-centos ENV JDK=openjdk-13.0.2_linux-x64_bin.tar.gz ENV MAVEN=apache-maven-3.6.3-bin.tar.gz # copy the jdk archive to the image,and it will automaticlly unzip the tar file ADD ${JDK} /opt/ ADD ${MAVEN} /opt/ ADD hudson.model.UpdateCenter.xml /var/jenkins_home/hudson.model.UpdateCenter.xml # use root USER root 创建hudson.model.UpdateCenter.xml 。国内或许需要此文件,解决有可能会第一次启动jenkins很慢很慢。 <?xml version='1.1' encoding='UTF-8'?> <sites> <site> <id>default</id> <url>http://mirror.xmission.com/jenkins/updates/update-center.json</url> </site> </sites>

Java序列化的状态

六眼飞鱼酱① 提交于 2020-02-26 08:34:55
Java序列化的状态 关键要点 Java序列化在很多库中引入了安全漏洞。 对序列化进行模块化处于开放讨论状态。 如果序列化能够成为模块,开发人员将能够将其从攻击表面上移除。 移除其他模块可以消除它们所带来的风险。 插桩提供了一种编织安全控制的方法,提供现代化的防御机制。 多年来,Java的序列化功能饱受 安全漏洞 和zero-day攻击,为此赢得了“ 持续奉献的礼物 ”和“ 第四个不可饶恕的诅咒 ”的绰号。 作为回应,OpenJDK贡献者团队讨论了一些用于限制序列化访问的方法,例如将其 提取到可以被移除的jigsaw模块中 ,让黑客无法攻击那些不存在的东西。 一些文章(例如“ 序列化必须死 ”)提出了这样的建议,将有助于防止 某些流行软件(如VCenter 6.5)的漏洞被利用 。 什么是序列化? 自从1997年发布 JDK 1.1 以来,序列化已经存在于Java平台中。 它用于在套接字之间共享对象表示,或者将对象及其状态保存起来以供将来使用(反序列化)。 在JDK 10及更低版本中,序列化作为java.base包和java.io.Serializable方法的一部分存在于所有的系统中。 GeeksForGeeks对 序列化的工作原理 进行了详细的描述。 有关更多如何使用序列化的代码示例,可以参看Baeldung对 Java序列化的介绍 。 序列化的挑战和局限

String.equalsIgnoreCase - UpperCase v. LowerCase

对着背影说爱祢 提交于 2020-02-26 08:04:08
问题 I was browsing through the openjdk and noticed a weird code path in String.equalsIgnoreCase, specifically the method regionMatches: if (ignoreCase) { // If characters don't match but case may be ignored, // try converting both characters to uppercase. // If the results match, then the comparison scan should // continue. char u1 = Character.toUpperCase(c1); char u2 = Character.toUpperCase(c2); if (u1 == u2) { continue; } // Unfortunately, conversion to uppercase does not work properly // for

Windows 10 安装 ElasticSearch

送分小仙女□ 提交于 2020-02-23 19:59:23
Java环境准备 可以下载oracle最新的JDK,作为C#程序员,支持一下微软的Mobile OpenJDK,构建一下Java环境。 微软的OpenJDK是针对Xamarin.Android的SDK,在我尝试之前不确定是否适用ElasticSearch。 结论是:没问题。 Microsoft 分发的 Mobile OpenJDK: https://docs.microsoft.com/zh-cn/xamarin/android/get-started/installation/openjdk 下载地址: Mac – https://dl.xamarin.com/OpenJDK/mac/microsoft-dist-openjdk-1.8.0.9.zip Windows x86 – https://dl.xamarin.com/OpenJDK/win32/microsoft-dist-openjdk-1.8.0.9.zip Windows x64 – https://dl.xamarin.com/OpenJDK/win64/microsoft-dist-openjdk-1.8.0.9.zip 如果使用Visual Studio 2017的组件安装Android SDK,安装路径如下 检查是否已在计算机上的正确位置安装 OpenJDK: Mac – $HOME/Library

如何快速卸载OpenJdk并安装Jdk1.8

血红的双手。 提交于 2020-02-22 04:46:47
卸载OpenJdk 一、首先确认Linux虚机上自带哪些OpenJdk 切换root用户,输入:rpm -qa | grep jdk 会查询出系统自带的OpenJDK及版本 rpm -qa | grep jdk 输出结果: 二、开始卸载OpenJdk并验证 输入:rpm -e --nodeps + ‘你要卸载的jdk全名’ rpm -e --nodeps java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.x86_64 输出结果(无): 验证是否卸载完成,再次查询 OpenJDK及版本 此时 OpenJDK已经被删除 输入:rpm -qa |grep jdk 和 java rpm -qa|grep jdk java 输出结果: 安装Jdk1.8 三、下载jdk1.8 首先我的附上百度网盘:链接: https://pan.baidu.com/s/10WTQFmni8VQu2FFnCVCQcQ 提取码:qwrg 新手也可以选择官网下载,练练手,百度搜索“jdk下载”,进入官网进行下载 然后选择你想要的版本进行下载,我们选择linux,此处就不继续细讲了 四、开始安装Jdk1.8 4.1 将下载好的文件上传至usr文件目录

Java安装和配置(jdk)

不羁岁月 提交于 2020-02-19 23:16:44
### 检验系统原版本 java -version ![](images/java原版本.png) ### 进一步查看JDK信息 rpm -qa | grep java ![](images/java原版本信息.png) ### 卸载OpenJDK ``` rpm -e --nodeps `rpm -qa | grep java` ``` 或 rpm -e --nodeps java-1.6.0-openjdk-devel-1.6.0.0-1.66.1.13.0.el6.x86_64 rpm -e --nodeps tzdata-java-2013g-1.el6.noarch rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 rpm -e --nodeps java-1.7.0-openjdk-devel-1.7.0.45-2.4.3.3.el6.x86_64 rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 ### 安装JDK rpm -ivh jdk-7u80-linux-x64.rpm ### 修改配置文件 修改/etc/profile文件,添加内容如下: JAVA_HOME=/usr/java/jdk1.7.0_80

Java版本和功能指南

二次信任 提交于 2020-02-18 04:48:51
您可以使用本指南查找和安装最新的Java,了解Java发行版(AdoptOpenJdk,OpenJDK,OracleJDK等)之间的差异,以及获得Java语言功能的概述,包括Java版本8-13。 Java 8,Java 11,Java 13 —有什么区别? 您可能还会喜欢:超越Java 8背景资料 首先,让我们看一下人们在尝试为其项目选择正确的Java版本时遇到的一些常见的实际问题。 如果要了解有关特定版本的更多信息,请转到 AdoptOpenJDK 网站,选择最新的Java版本,下载并安装它。然后回到本指南,仍然学习有关不同Java版本的一两个东西。 我应该使用哪个Java版本? 截至2019年9月, Java 13 是最新发布的Java版本,每6个月更新一次版本-Java 14计划在2020年3月发布,Java 15计划在2020年9月发布,依此类推。在过去,Java的发布周期 更长,最长可达3-5年! 随着许多新版本的出现,基本上存在以下实际使用场景: 公司中的旧项目经常使用Java 8进行阻塞(请参阅下面的“ 为什么公司仍停留在Java 8上?”部分)。因此,您也将不得不使用Java 8。 有些旧项目甚至卡在Java 1.5(2004年发布)或1.6(2006年发布)上,对不起,朋友们! 如果您确保使用最新的IDE,框架和构建工具并启动新项目,则可以毫不犹豫地使用Java