Ubuntu20.04LTS编译openjdk-8教程
因为网上很多openjdk源码教程都是基于openjdk8,所以考虑搭建jdk8编译环境。本文记录一些安装过程以及遇到的问题和解决方法。
前置环境与安装包系统版本:
(1)openjdk-8下载链接:https://download.java.net/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip
参考:https://www.cnblogs.com/flying607/p/9880053.html
(2)openjdk-7下载链接:https://download.java.net/openjdk/jdk7u75/ri/openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz
参考:https://jdk.java.net/java-se-ri/7
安装过程及问题记录
首先,把gcc和g++版本降下来
1234567891011apt install gcc-4.8 g++-4.8如果出现Package 'gcc-4.8' has no install ...
静态库和动态库详解
静态库和动态库详解1.什么是库库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。
库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
库文件有两种,静态库和动态库(共享库),区别是:
静态库在程序的链接阶段被复制到了程序中;
动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
库的好处:
代码保密
方便部署和分发
2.静态库的制作静态库的命名规则:
Linux:libxxx.a
Windows:libxxx.lib
静态库的制作:
gcc获得 .o 文件
使用 ar 工具(archive)将 .o 文件打包
r - 将文件插入备存文件中
c - 建立备存文件
s - 索引
123//add.c, sub.c, mult.c, div.cgcc -c add.c #获得add.o, sub.o, mult.o, div.oar rcs libcalc.a add.o, sub.o, mult.o, div.o # 获得静态库libxxx.a
...
GCC简介
GCC简介1.什么是GCCGCC原名为GNU C语言编译器(GNU C Compiler),后来随着不断发展,被称为GNU编译器套件(GNU Compiler Collection)。是由 GNU 开发的编程语言译器。GNU 编译器套件包括 C、C++、Objective-C、Java、Ada 和 Go 语言前 端,也包括了这些语言的库(如 libstdc++,libgcj等)。
2.GCC的特点
GCC是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。
GCC不仅是个本地编译器,它还能跨平台交叉编译。所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行。而gcc编译出来的程序能够在其他平台进行运行。例如嵌入式程序可在x86上编译,然后在arm上运行。
GCC有多种语言前端,用于解析不同的语言。
GCC是按模块化设计的,可以加入新语言和新CPU架构的支持。
GCC是自由软件。任何人都可以使用或更改这个软件。
GCC不仅支持 C 的许多“方言”,也可以区别不同的 C 语言标准;可以使用命令行选项来控制编译器在翻译源代码时应该遵循哪个 C 标准。例如,当使用命令行参数 ...
Java性能分析工具Async-Profiler教程
什么是async-profiler简介async-profiler是一个低开销的 Java 采样分析器,它不会遇到安全点偏差问题。它使用HotSpot 特定的 API 来收集堆栈信息,追踪内存分配。该分析器可与 OpenJDK、Oracle JDK ,以及其他基于 HotSpot JVM 的 Java 运行时配合使用。
async-profiler 可以跟踪以下类型的事件:
CPU周期
硬件和软件性能计数器,例如缓存未命中、分支未命中、页面错误、上下文切换等。
Java 堆中的分配
Contented lock尝试,包括 Java 对象监视器和 ReentrantLocks
下载地址
Linux x64 (glibc): async-profiler-2.9-linux-x64.tar.gz
Linux x64 (musl): async-profiler-2.9-linux-musl-x64.tar.gz
Linux arm64: async-profiler-2.9-linux-arm64.tar.gz
macOS x64/arm64: async-profiler- ...
JMH基础教程
前言JMH(Java Microbenchmark Harness)是一个面向 Java 语言或者其他 Java 虚拟机语言的性能基准测试框架。它针对的是纳秒级别、微秒级别、毫秒级别,以及秒级别的性能测试。
快速上手虽然JMH是随着Java9一起发布的,但是它并没有与任何具体的Java版本绑定,而且JDK中没有支持JMH的工具,所以JMH的安装是非常简单的,我们只需要在Maven项目中引入下面的依赖,就可以轻松愉快地写代码了。
12345678910<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-generator-annprocess</artifactId> <version>1.36</version></dependency> <dependency><groupId>org.openjdk.jmh</groupId> <artifactI ...
JVM学习笔记(一)
引言什么是JVM?
定义:英文Java Virtual Machine,一种能够运行java bytecode的虚拟机,以堆栈结构机器来进行实做。最早由Sun微系统所研发并实现第一个实现版本,是Java平台的一部分,能够运行以Java语言写作的软件程序。(维基百科)
好处:
一次编写,到处运行
自动内存管理,垃圾回收功能
数组下标越界检查
多态
比较(jvm,jre,jdk):
学习JVM有什么用?
面试
理解底层的实现原理
中高级程序员的必备技能
常见的JVM
学习路线
类从Java源代码编译为Java字节码,通过类加载器加载到JVM中去运行。
类被存放在方法区,类的实例,对象放在堆里,堆里的对象在调用方法时,会用到虚拟机栈,程序计数器,本地方法栈。
方法执行时,每行代码由解释器逐行执行,方法中的热点代码由JIT即时编译,优化。
GC模块会对堆里面一些不再使用的对象进行垃圾回收。
一些Java代码不方便实现的功能,需要和操作系统打交道,所以需要调用本地方法接口。
学习顺序:
JVM内存结构
垃圾回收机制
类的字节码结构与编译器优化
类加载器
运行期即时编译器
...
基于微信小程序的AI自然卫士
作品简介 响应“十四五”林业草原保护发展规划对保护野生动植物的号召及《国家重点保护野生动物名录》和《国家重点保护野生植物名录》首次全面调整,为了更好地普及野生动植物知识,满足教师、学生、动植物爱好者的需求,我们基于人工智能和微信小程序技术,推出了支持热点快讯、动植物辞典、AI识别、AI问答、答题挑战等功能的AI自然卫士微信小程序。
主要功能如下:
1. 展示关于自然保护、野生动植物的热点消息和相关政策,支持图文和视频两种展示形式。
2. 提供野生动植物的百科全书,支持根据保护级别和动植物类别筛选查看。
3. 基于图像识别技术,可识别近八千种动物、超过2万种常见植物和近8千种花卉。
4. 答题挑战:提供有关动植物的趣味问题,用户答题后可参与排行榜。
5. AI问答助手:支持百科问答和聊天,方便给用户答疑解惑
安装说明使用方式1: 在手机微信首页下拉。然后搜索小程序“AI自然卫士”,即可进入打开。
使用方式2:使用联网的手机微信扫描以下二维码即可打开(小程序二维码如下所示)。
使用方式3: 打开微信开发者工具,点击导入,选择项目文件 ...
基于Spring Boot的个人博客系统
你好👋,这是一个基于Spring Boot 的个人博客系统,技术框架选用(Spring, SpringMVC, SpringBoot, Mybatis, Thymeleaf)。
目前已经使用微信云托管成功上线,项目托管于GitHub,但是因为密码等安全问题,托管仓库为私有仓库,同时因为网速原因,我在Gitee上重新开源了一个隐去密码的版本,你可以自由查看本仓库源代码,另外,你可以通过下面的链接访问网站前台的演示,查看其效果,网站后台你可以自行编译源代码查看,这里因为安全原因未开放:
https://springboot-nob0-1701609-1310100045.ap-shanghai.run.tcloudbase.com/
Gitee链接:https://gitee.com/littleturing/spring-blog
如果想要运行本项目,只需要替换成自己数据库访问路径和密码即可!
下面是项目的具体介绍与分析 :)
1.项目展示关于页面,从整体到局部,一点点调试更改,是个十分复杂的过程,需要很有耐心
2.后端设计(重点)1.概要(三层架构)
2.错误处理(捕获 ...
Spring Boot项目微信云托管入门部署
微信云托管本身是一个服务器,里面的软件都已经配置好了,直接使用即可,适用于一些简单部署的项目。直接把项目直接上传到服务器即可。无需各种繁琐的软件配置和打包,微信云托管统统给你搞定。而且系统会根据使用量计费,对于一些使用量比较少的系统,也是很划算的。本文从一个 Spring Boot 项目简单部署云托管项目。
本文转载自思否原文链接:https://segmentfault.com/a/1190000041523295
云托管简介在 官网 显示微信云托管的几个优势:
开箱即用
支持多种后端语言
自动扩容
云托管相对传统项目的优势
发布一个简单的 demo 在linux服务器
创建 springboot 项目
将 springboot 项目打成war 包
在 linux 服务器安装 jdk、tomcat,阿里云或者腾讯云开放对应的端口
安装 mysql
执行sql 语句
上传 war 包到 tomcat 服务器
对应的云托管
创建 springboot 项目
在云托管数据库执行 sql 语句
上传springboot文件
云托管直接上传项目文件即可。
入门进入控制 ...
关于一个SSM项目的总结与思考
通过最近一段时间的学习,完成了一个电商项目的完整开发:从0开始 独立完成企业级Java电商网站开发(服务端),总的收获还是挺大的,大致明白了Java后端这个工作岗位究竟是在做什么,究竟需要哪些能力,同时,也明白了所谓的编程到底是怎么一回事,还有就是常听别人说的CRUD到底是什么感觉😂
接下来主要谈谈自己的一些感受。
目前业界基本上都是采用前后端分离的思想,两者之间通过Json格式字符串通信。Java主要是用来写业务逻辑的,就是负责接收前端发过来的用户请求,然后查询数据库,返回结果,这就是所谓的增删改查(CRUD)。
Tomcat是一个容器,可以解析servlet和jsp,其中jsp是个包含数据和视图的混合页面,里面既可以写逻辑,也可以写视图,这样就造成了控制和视图的耦合,于是有了前后端分离的思想。后来,我们只使用servlet,摒弃jsp开发。但是吧,servlet这个东西开发起来十分复杂,这里的复杂不是指逻辑上复杂,而是出现了很多样板代码,很多东西不难但是很麻烦。于是,又出现了框架,框架是一个半成品,它封装了很多通用的代码,同时也保留了足够多的自由度,开发人员从此基于框架进 ...