OpenJDK

openjdk源码编译踩坑

感情迁移 提交于 2020-08-16 05:16:30
1. 在ubuntu18.04下编译openjdk源码 1.1 apt-get 无法安装 libx11-dev, 换成了aptitude,结果还是安装不成功。并且发现aptitude使用不习惯,要换回apt-get,问题就出在了这里。由于需要自己下载.deb报,这时在便在搜索引擎中去搜索,导向了一些网址,然后再去下载某些deb.安装之后却发现apt还是有某些兼容问题,提示使用apt --fix-broken install去解决。执行之后还是发现某些依赖问题。无意间找到了 正宗源头package.ubuntu.com,就这样一个个的去下载安装中需要的依赖包,解决了困惑了多年的apt-get自动安装不能解决的依赖问题。 1.2 由于一开始在别的站点libstdc++6高于ubuntu18.04对应( bionic (18.04LTS) )版本,这时想着把该包换成对应版本的。 问题就出在了这里。 由于需要先卸载该包,可是依赖该包的包特别多,此时提示全部卸载。卸载不卸载哪?由于了好久,还是决定冒险试下。 结果 应用图表全部基本被搞掉 了。怎么办哪?幸好当初存下来了当初要删除哪些软件包,那就一个个再恢复吧,看看能不能救活。安装过程中某些循环依赖需要借助apt-get install -f来解决。一个个的弄下来,少说有上百个被删的软件包,而且其中很多都有别的许多依赖,比如我要安a,a依赖a1

一个java文件是怎么一步一步执行的

浪子不回头ぞ 提交于 2020-08-16 03:46:45
说点什么呢,java比你想的要难 写了多年java,发现好多人并不知道一个class文件怎么被解析执行的,所以我也发表下看法 1. 编写java源文件 ​ 2. 把java源文件编译成 .class字节码文件 ,JVM不认识源文件 ​ 3. JVM处理class文件 搞java开发,不得不提的就是JVM了, JVM全称是 Java Virtual Machine(简称JVM,中文叫Java虚拟机,请务必记住JVM,看到不少人整天JVM的,都不知道它的全称是什么),java的宿主环境,可以认为JVM就是虚拟仿真出来的一台计算机。简单绘了一张图,如下(一图胜千言): ​ java之所以一次编写,到处运行,就是因为虚拟机(虚拟虚拟,虚拟出来的计算机,一台被托管的电脑)的缘故。 3.1 jvm处理class文件 加载是指将java源文件编译之后的class文件读入到内存中,然后在堆区创建一个java.lang.Class对象,用于封装类在方法区内的数据结构。类加载的最终目的是封装类在方法区的数据结构,并向java程序员提供访问方法区数据的接口。 类的生命周期一共分为5个阶段,加载、连接、初始化、使用、卸载。 ​ 加载 :类的加载过程主要完成3件事件,1.通过类的全限定名来获取定义此类的二进制字节流,2.将这个类字节流代表的静态存储结构转为方法区的运行时数据结构,3

总结:Docker

核能气质少年 提交于 2020-08-15 21:31:14
基础环境要求 要求系统版本不低于 CentOS Linux release 7.4.1708 (Core) 检查了下,满足的机器为transfer的机器:10.62.253.69,暂时使用这台机器操作。 登录镜像仓库 docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 拉取需要的基础镜像 docker pull docker-registry.qiyi.virtual/docker/openjdk:11-jdk-slim 生成镜像文件 Dockerfile案例: FROM docker-registry.qiyi.virtual/docker/openjdk:8u212-jdk-alpine MAINTAINER weiwei WORKDIR /data/weiwei/firstDocker #指定工作目录,CMD命令默认就是在这个目录下找要执行的文件的 ADD ./hubble-biz-host-2.2.3-001-SNAPSHOT.jar /data/weiwei/firstDocker #将要执行的文件拷贝到这个目录下 CMD ["java","-jar","hubble-biz

Java架构师鲁班二期

跟風遠走 提交于 2020-08-15 11:31:25
课程介绍〗:课程旨在帮助在职Java开发工程师晋升提高,由来自一线大型 互联网 公司架构师、技术总监全职授课,内容涵盖: 高并发、高可用、分布式、高性能、架构设计、源码分析。〖课程目录〗:openjdk编译调试、java线程模型【回放】openjdk编译调试、java线程模型(7月4日 20:00-22:00) 02Java 当中的"锁"事【回放】Java 当中的"锁"事(7月7日 20:00-22:00) 03synchronized和volatile关键字【回放】synchronized和volatile关键字(7月9日 20:00-22:00) 04并发编程之并发容器【回放】并发编程之并发容器(7月11日 20:00-22:00) 05并发中锁的原理:JOL查看对象布局、各种锁之间的性能对比【回放】并发中锁的原理(7月14日 20:00-22:00) 06JAVA锁膨胀的过程【回放】JAVA锁膨胀的过程(7月16日 20:00-22:00) 07锁的膨胀过程二【回放】锁的膨胀过程二(7月18日 20:00-22:00) 08并发编程之线程池【回放】并发编程之线程池(7月21日 20:00-22:00) 09CAS和AQS的应用和原理之CyclicBarrier-semaphore【回放】CAS和AQS的应用和原理(7月23日 20:00-22:00)

Hello World调试Hotspot

早过忘川 提交于 2020-08-15 11:09:26
本地安装GDB brew install gdb ➜ ~ gdb --version GNU gdb (GDB) 9.1 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 除了这个,在Mac系统系统里面还要配置证书相关的操作。 按入下步骤创建代码签名的证书: 打开 Keychain Access 应用程序(/Applications/Utilities/Keychain Access.app) 执行菜单 钥匙串访问 -> 证书助理 -> 创建证书 填写如下信息: 名称:gdb_codesign 身份类型:自签名根证书 证书类型:代码签名 钩选: 让我覆盖这些默认设置 一路确定,直到 指定证书位置 的步骤,选择 系统 点击“创建”,会提示用输入系统登录密码,创建完成 在 钥匙串访问程序 中,选择左侧栏的 系统 和 我的证书 ,找到你刚刚创建的

Dockerfile实践小提示

瘦欲@ 提交于 2020-08-15 07:53:52
https://mengz.me/posts/dockerfile-practies-tips/ 在进行应用容器化的实践中,我们可以使用多种方式来创建容器镜像,而使用 Dockerfile 是我们最常用的方式。 而且在实现CI/CD Pipeline的过程中,使用Dockerfile来构建应用容器也是必须的。 本文不具体介绍Dockerfile的指令和写法,仅仅是在实践中积累的一些写好一个Dockerfile的小提示,体现在一下几个方面: 减少构建时间 减小镜像大小 镜像可维护性 重复构建一致性 安全性 <!-- more --> 减小构建时间 首先来看看下面这个Dockerfile FROM ubuntu:18.04 COPY . /app RUN apt-get update RUN apt-get -y install ssh vim openjdk-8-jdk CMD [“java”,”-jar”,”/app/target/app.jar”] 要减小构建的时间,那我们可以例如Docker构建的缓存特性,尽量保留不经常改变的层,而在Dockerfile的指令中, COPY 和 RUN 都会产生新的层,而且缓存的有效是与命令的顺序有关系的。 在上面的Dockerfile中, COPY . /app 在 RUN apt-get ... 之前,而COPY是经常改变的部分

Object的内存布局

只谈情不闲聊 提交于 2020-08-15 03:36:59
  我们在Java中的一个object对象在jvm内存中占用的空间大小是多少呢?   代码如下: Object o = new Object() ; 这句代码执行时: 首先在该代码执行时,是在一个方法内,方法的数据存在于栈帧。在栈中,拿出一块空间,存放指向对象的指针的 o ,在堆中,new 出一个object对象,然后栈中的 o 指向堆中的对象。内存布局如图所示:    那么,我们new出来的堆中的对象,具体的内存布局是什么样的呢。我们通过使用一个openjdk的类,将该对象的相关信息打印出来。 引入 Java Object Layout 新建一个maven 项目,配置 xml 文件如下: < dependencies > < dependency > < groupId > org.openjdk.jol </ groupId > < artifactId > jol-core </ artifactId > < version > 0.9 </ version > </ dependency > </ dependencies > 测试代码如下:    1 publicstaticvoidmain(String[]args){ 2 Objecto= newObject(); 3 System.out.println(ClassLayout.parseInstance(o)

NullPointerException 的处理新方式,Java14 真的太香了!

萝らか妹 提交于 2020-08-15 01:41:55
   20 大进阶架构专题每日送达   本文来源:锅外的大佬   在Java语言中,处理空指针往往是一件很头疼的事情,一不小心,说不定就搞出个线上Bug,让你的绩效考核拿到3.25。   最近新出的Java14,相信大家都有所耳闻,那么今天就来看看,面对NullPointerException,Java14有哪些更好的处理方式呢?   1.传统的 NullPointerException   我们编码过程中呢,经常会使用链式调用的方式来写代码,这样写起来很方便,也很清晰,但是,一旦出现NullPointerException,那就头大了,因为你很难知道异常是在什么时候开始发生的。   举个简单的例子,就比如下面的代码,要找到公司某个员工的户籍所在地,我们这样来调用    String city = employee.getDetailInfos().getRegistryAddress().getCity();   在链式调用的过程中,如果 employee , getDetailInfos() ,或者 getRegistryAddress() 为空,JVM就会抛出 NullPointerException   那么导致异常的根本原因是什么?如果不使用调试器,很难确定哪个变量为空。而且,JVM也只会打印导致异常的方法、文件名和行号,仅此而已。那么下面,我将带大家了解Java

hadoop安装教程

一笑奈何 提交于 2020-08-14 20:20:57
一、hadoop安装 1. 修改主机名和 IP 地址映射 sudo vi /etc/ hostname #修改主机名(如,删掉原有内容,命名为 hadoop) ping hadoop # ping 通证明成功 2. 安装java sudo apt install openjdk- 8 -jdk-headless 配置JAVA环境变量,在当前用户根目录下的.profile文件最下面加入以下内容: export JAVA_HOME=/usr/lib/jvm/java- 8 -openjdk- amd64 export PATH =$JAVA_HOME/ bin:$PATH export CLASSPATH =.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 使用 source 命令让立即生效 source .profile rogn@ubuntu:~$ java - version openjdk version " 1.8.0_252 " OpenJDK Runtime Environment (build 1.8 .0_252-8u252-b09- 1 ~ 16.04 - b09) OpenJDK 64 -Bit Server VM (build 25.252 -b09, mixed mode) 3. 下载hadoop 3.2.1

搭建 Java 部署环境:CentOS 7 通过 yum 安装JDK(openjdk)

不想你离开。 提交于 2020-08-14 13:44:04
使用 yum 命令 认识 yum 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装. 软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系. yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上. yum 起到的功能和 Maven 的依赖管理功能类似. 使用 Maven 能帮我们方便的安装一些第三方 jar 包, 而 yum 方便我们方便的安装第三方程序. 类似的, Github 也能起到 “软件仓库” 的效果, 而且确实有些编程语言的包管理工具就是基于 Github (例如 Go语言). 只不过, Github 不光能用于分发程序, 也能管理源码并进行协同开发, 而 yum 和 maven 都是仅用于分发程序. 查看软件包列表 yum list | grep [ 软件包关键字 ] # 注意 , 最好要加上 grep , 否则罗列的内容会非常多 , 导致机器很卡 . 安装软件包(需要管理员权限) yum