JDK

Eclipse配置Tomcat9

∥☆過路亽.° 提交于 2020-12-17 08:25:46
一、设置Runtime Environment 打开 Preferences 找到 Server 下的 Runtime Environment。 然后 Add,根据自己的 Tomcat 和 jdk 版本选择。 二、创建Web Project 项目 创建 Dynamic Web Project。 右键项目 Build path -> add library 加上所需要的包。 三、添加Server 右键空白处,添加 Server。 将要添加的项目选中,点击 Add。 最终 Servers 视图。 四、创建JSP文件 在 WebContent 中创建一个 index.jsp 在 body 中输入一些文字。 启动 Tomcat。 在浏览器中输入 localhost:8080/你的项目名/你编写的jsp ,若不写后面的 jsp,默认打开 index 页面。 来源: oschina 链接: https://my.oschina.net/u/4391166/blog/3538858

Java Thread之start和run方法的区别

自古美人都是妖i 提交于 2020-12-17 07:58:04
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11421515.html start 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。 start方法源码示例 一个 Java 线程的创建本质上就对应了一个本地线程(native thread)的创建,两者是一一对应的。 关键问题是:本地线程执行的应该是本地代码,而 Java 线程提供的线程函数(run)是 Java 方法,编译出的是 Java 字节码。 所以, Java 线程其实提供了一个统一的线程函数,该线程函数通过 Java 虚拟机调用 Java 线程方法 , 这是通过 Java 本地方法 start0 调用来实现的。 也就是新创建的线程启动调用native start0方法,而这些native方法的注册是在Thread对象初始化的时候完成的 Thread 类有个 registerNatives 本地方法,该方法主要的作用就是注册一些本地方法供 Thread 类使用,如

JVM垃圾回收详解

落花浮王杯 提交于 2020-12-17 06:47:31
通常,我们在写java程序的时候,似乎很少关注内存分配和垃圾回收的问题。因为,这部分工作,JVM已经帮我们自动实现了。 这样看起来,好像很美好,但是任何事情都有两面性。虽然JVM会自动的进行垃圾回收,但是,如果遇到有些问题,JVM自己也处理不了呢? 因此,我们需要了解一下JVM垃圾回收是怎样运作的,这样才能在遇到问题的时候,有的放矢。所以,今天就来聊一聊JVM的垃圾回收吧。 首先,思考一下,为什么需要进行垃圾回收? 我们知道,在创建对象的时候,Java会把对象的内容放到堆中。随着时间的推移,堆中的对象肯定会越来越多,但是,堆的大小是有限制的。如果,我们不进行垃圾回收,也就是把无用的对象进行清除和回收,那么JVM将不堪重负,最终导致内存泄漏。 既然我们需要进行垃圾回收,那么,首先得知道什么是垃圾。 在垃圾收集器对堆内存进行回收前,会先判断哪些对象还在“存活”,哪些对象已经“死去”(即不可能再被任何途径使用的对象),这些“死去”的对象,就是我们需要进行回收的垃圾。 那么,通过什么方式去判定是否为垃圾呢?(即判定对象是否存活) 引用计数算法(已淘汰) 引用计数算法,是指给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1,当引用失效时,计数器的值就减1。当计数器值为0时,该对象就会被回收。 可以说,引用计数算法的实现非常简单,判定效率也很高。但是,我们忽略了一个问题

Centos7安装dubbo与zookeeper服务配置

天涯浪子 提交于 2020-12-17 06:27:40
目录 环境: 第一步:安装jdk,并且配置环境变量 1.解压jdk: 2.配置环境变量: 3.保存并使文件立即生效: 4.立即重启虚拟机,进行下面的安装 第二步:安装注册中心zookeeper 1.解压zookeeper: 2.在zookeeper目录下创建data和logs目录: 3.将/usr/local/zookeeper3.4.6/zookeeper-3.4.6/conf 目录下的 zoo_sample.cfg拷贝: 4.修改配置文件: ​ 5.在vi /etc/profile末尾添加zookeeper配置 6.配置文件立即生效: 7.关闭防火墙,并且启动测试 第三步:安装dubbo-admin-war和tomcat 1.解压tomcat: 2.解压dubbo文件 3.进入tomcat的conf目录下修改server.xml 4.修改server.xml 5.启动tomcat服务,进入tomcat的bin下 6.启动zookeeper服务,进入zookeeper的bin下 第四步:在浏览器中输入地址显示如下: 环境: 1.centos7 2.jdk-7u76-linux-x64.tar.gz 2.tomcat:apache-tomcat-7.0.59.tar.gz 3.zookeeper-3.4.6.tar.gz 4.dubbo-admin-2.5.3.war 具体的流程:

Java-JUC(六):创建线程的4种方式

故事扮演 提交于 2020-12-17 01:54:17
Java创建线程的4种方式: Java使用Thread类代表线程,所有线程对象都必须是Thread类或者其子类的实例。Java可以用以下4种方式来创建线程: 1)继承Thread类创建线程; 2)实现Runnable接口创建线程; 3)实现Callable接口,通过FutureTask包装器来创建Thread线程; 4)使用ExecutorService、Callable(或者Runnable)、Future实现由返回结果的线程。 接下来,针对这四种方式详细介绍及其用法: 1)继承Thread类创建线程 Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extends Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。 例如: /** * 无返回值的 */ class MyThread extends Thread { CountDownLatch countDownLatch; public MyThread(CountDownLatch countDownLatch) { this .countDownLatch =

jdk8生成javadoc报错的解决

南笙酒味 提交于 2020-12-17 00:48:00
maven-javadoc-plugin插件生成报Error decoding percent encoded characters 需增加<additionalparam>-Xdoclint:none</additionalparam>配置,增加execution的,可能不起效。 <profile> <id>java8</id> <activation> <jdk>1.8</jdk> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <configuration> <encoding>UTF-8</encoding> <aggregate>true</aggregate> <charset>UTF-8</charset> <docencoding>UTF-8</docencoding> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </plugins> </build> </profile>    来源:

GitHub 标星 15.3k,Java 编程思想最新中文版

牧云@^-^@ 提交于 2020-12-16 21:38:35
有句俗话叫做,“没吃过猪肉,也见过猪跑”,常用来形容人们事情虽然没有亲身经历过,但也听说过。这句俗话同样适用于《Java 编程思想》这本书,学过 Java 的即便是没有看过这本书,也至少听说过。 虽然对于现在的小朋友来说,还真的是吃过猪肉,没见过猪跑。但意思就那么个意思。 说起《Java 编程思想》这本书,还真的是挺有渊源的。我上大学那会,班主任教我们 Java,极力推崇这本书和另外一本,叫《Java 开发宝典》。 这两本书,一本比一本厚,厚到可以放在座位上当垫子。偷偷地告诉你,我就这么干过,还真的能极大的提升屁股的舒适度。有一说一,这两本书对 Java 的初学者很不友好,尤其是像我这样的学渣,简直就是最佳劝退读物。 大学那会真没钱,但硬是攒了一个月的零花钱,狠狠心买了一本正版的《Java 编程思想》。有不少同学都是在某宝上买的盗版。书是花钱买来的,以为自己会好好读,但事实证明,越读越觉得这本书太枯燥了。最后读了两章就彻底搁浅了。 大学毕业去苏州的时候把这本书也带了过去,主要是不舍得扔。2014 年回洛阳的时候,实在是不想再带回来了,就送给了同事当做纪念。 去年的时候,突然心血来潮,又买了一本,认认真真地读了起来。这次仍然感觉很枯燥,但竟然耐着性子读完了。 这些笔记的内容更符合新手的视觉,如果你感兴趣的话,可以通过下面的链接去看看。 https://www.zhihu.com

面试官再问currentHashMap,就将这篇文章甩给他

≯℡__Kan透↙ 提交于 2020-12-16 18:42:13
点击上方 “ Java专栏 ”, 选择“置顶或者星标” 第一时间阅读精彩文章! 1、☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 2、☞ 《Java面试手册》.PDF 点击查看 currentHashMap的介绍 ConcurrentHashMap 是线程安全并且高效的一种容器,我们就需要研究一下 ConcurrentHashMap 为什么既能够保证线程安全,又可以保证高效的操作。 为什么使用 ConcurrentHashMap ,我们就需要和 HashMap 以及 HashTable 进行比较? HashMap 是线程不安全的,在多线程的情况下, HashMap 的操作会引起死循环,导致 CPU 的占有量达到100%,所以在并发的情况下,我们不会使用 HashMap 。 死锁原因 在 HashMap 扩容的时候会调用 resize() 方法,就是这里的并发操作容易在一个桶上形成环形链表;这样当获取一个不存在的 key 时,计算出的 index 正好是环形链表的下标就会出现死循环。 HashTable 其中使用synchronize来保证线程安全,即当有一个线程拥有锁的时候,其他的线程都会进入阻塞或者轮询状态,这样会使得效率越来越低。 而 ConcurrentHashMapMap 的锁分段技术可以有效的提高并发访问率 HashTable 访问效率低下的原因

面试官还敢问你JVM调优问题,把这篇文章甩给他!

淺唱寂寞╮ 提交于 2020-12-16 16:55:32
目录 JVM调优 概念 基本垃圾回收算法 垃圾回收面临的问题 分代垃圾回收详述1 分代垃圾回收详述2 典型配置举例1 典型配置举例2 新一代的垃圾回收算法 调优方法 反思 一、JVM调优的一些概念 数据类型 Java虚拟机中,数据类型可以分为两类: 基本类型 和 引用类型 。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括: 类类型 , 接口类型 和 数组 。 堆与栈 堆和栈是程序运行的关键,很有必要把他们的关系说清楚。 Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中, 一个空Object对象的大小是8byte ,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为: 4byte+8byte 。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息

shell一键部署nginx+tomcat

…衆ロ難τιáo~ 提交于 2020-12-16 16:01:53
1.首先拉取环境 tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ zlib-devel pcre-devel tar zxf nginx-1.16.1.tar.gz cd nginx-1.16.1 && ./configure && make && make install cd /root && rpm -ivh jdk-8u20-linux-x64.rpm tar zxf apache-tomcat-7.0.96.tar.gz cp -r apache-tomcat-7.0.96 /opt/tomcat /usr/local/nginx/sbin/nginx /opt/tomcat/bin/startup.sh   判断nginx shulian=`cat /usr/local/nginx/conf/nginx.conf|grep 'proxy_pass http://192.168.11.128:8080;'|wc -l` if [ $shulian -ne 1 ];then sed -i 's/index.htm;$/index.jsp;/' /usr/local/nginx/conf/nginx.conf sed -i '/404.html;