项目中有个时间戳数据需要定时去取;时间戳保存在远程文本文件中,不同城市的时间戳文本地址不一样。
开发时定时器使用Timer来调度;不通城市的时间戳通过不同线程去取得并更新。
开始项目运行时日志会经常报告JVM内存溢出,开始以为是开的线程过多,因为每个时间段会新建几个线程(开始没有考虑线程池)。
改动使用线程池后过一段时间,还是会出现JVM内存溢出,用Jprofiler查看JVM使用情况,发现JVM会阶梯状升高。
改用线程池后发现这个问题还是会出现,而且情况跟之前差不多。
以为是Timer的问题,改用ScheduledThreadPoolExecutor来操作,发现问题还是一样。
一直纠结这个问题,也许是经验问题。
后来查看URL类的API发现URL对象中openConnection()方法会新建一个到远程目标的连接。查看自己的代码发现自己的每个线程都会新建一个URL对象,并开启一个openConnection(),这样的话我每30秒开启N个线程(使用了线程池)就会新建N个连接操作。发现这个问题后改用:
1.ScheduledThreadPoolExecutor定时启动线程池(2个)
2.每个线程预建一个openConnection();以后线程启动都使用openConnection()得到的同一对象。
改过之后用Jprofiler查看JVM使用情况,发现JVM使用情况稳定。
原来是URL.openConnection()惹的祸。
到底还是经验问题。
分享到:
相关推荐
3、背景:尝试通过java.net.URL类的openConnection()方法打开一个网络连接,并进一步调用connect()方法来实际建立链接时报错的。 4、应该能让服务器识别客户端来源、认证信息、接受类型、内容类型等。 解决: ...
访问带https请求忽略ssl证书,避免url.openStream报错javax.net.ssl.SSLHandshakeException url = new URL(imageUrl);...DataInputStream dataInputStream = new DataInputStream(url.openStream());
在Java中,`java.net.URL`类是用于表示统一资源定位符的,它可以用来打开到网络资源的连接。`java.io.InputStream`是处理输入流的基类,我们通常会用它来读取网络上的数据。 以下是一个基本的步骤来从网络上读取...
本文将深入探讨JAVA中三种常见的URL连接方法,即使用`URL`类的`openConnection()`方法、使用`HttpURLConnection`类,以及采用`HttpClient`库进行网络请求。 #### `URL`类及其使用 `URL`类是JAVA中用于表示统一资源...
1. **建立连接**:通过URL对象的`openConnection()`方法建立到服务器的连接。 ```java HttpURLConnection connection = (HttpURLConnection) url.openConnection(); ``` 2. **设置请求属性**:根据需求设置HTTP请求...
URLConnection urlConnection = url.openConnection(); // http的连接类 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; // 设置是否从httpUrlConnection读入,默认情况下是true; ...
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); // 跳过证书验证 urlConnection.setHostnameVerifier(DO_NOT_VERIFY); InputStream in = urlConnection.getInputStream(); ``` ...
window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...
创建URL对象后,我们可以调用`openConnection()`方法来建立到该资源的连接,返回一个`URLConnection`实例: ```java URLConnection connection = url.openConnection(); ``` `URLConnection`提供了多种配置方法,...
这个“javaurl.rar_url”压缩包包含的代码示例可能涉及了如何从URL下载文件并将其保存到本地系统。让我们深入探讨这个主题。 首先,Java中的`java.net.URL`类是用来表示一个网络上的特定资源,它包含了协议、主机名...
此外,`java.net.URL`类还提供了其他方法,如`openConnection()`,可以创建一个URLConnection对象,进一步定制网络连接的行为,例如设置超时、HTTP请求头等。 在本示例中,`www.pudn.com.txt`可能是包含多个URL的...
在Android开发中,`java.net.URL`类是一个非常重要的工具,用于表示统一资源定位符(Uniform Resource Locator),也就是我们常说的网址。这个类允许我们构建、解析和访问网络资源,对于进行网络通信至关重要。本篇...
- **POST**:与GET相反,POST请求的参数不放在URL中,而是放在HTTP请求体中,适用于传输较大数据量或者模拟表单提交,如用户登录、文件上传等。 2. **URLConnection对象**: - 当调用`URL.openConnection()`时,...
要与一个URL建立连接,首先需要创建一个URL对象,然后调用这个对象的`openConnection()`方法来获取URLConnection对象。之后,可以使用URLConnection对象的方法来打开连接、设置请求属性以及读取响应。 #### 常用...
在Java编程中,URL(Uniform Resource Locator)是一个用于定位网络资源的重要工具,它包含了协议、主机名、路径等信息。本教程将详细讲解如何利用Java的URL类来实现文件的下载功能,同时也会提及到ImageIO类在处理...
- 使用`new URL(url)`创建一个URL对象,然后调用`openConnection()`方法打开到该URL的连接。 - `getResponseCode()`方法获取HTTP响应的状态码,200表示请求成功。 3. **重试机制**: ```java int counts = 0; ...
通过创建URL对象,可以获取到与该URL关联的信息,如主机名、端口号等,并且可以通过`openConnection()`方法建立到服务器的连接。 ```java URL url = new URL("http://example.com/api"); URLConnection connection ...
在Java开发中,经常需要对URL进行操作,包括但不限于检查URL的有效性、检测URL是否可以连接、获取服务器响应等。本文将通过几个示例代码片段,详细介绍如何利用Java进行这些操作。 #### 二、检查URL有效性 检查URL...
### window.open打开新窗口,不被拦截的方法 在Web开发中,经常会有需求需要在一个新的浏览器窗口或标签页中打开链接或展示内容。这通常通过JavaScript的`window.open()`方法来实现。但是,在实际应用中,由于...
要从指定的URL获取网页内容,首先需要创建一个`URL`对象,然后调用`openConnection()`方法得到`HttpURLConnection`实例。为了模拟浏览器(例如IE)的行为,可以设置`User-Agent`请求头。连接建立后,通过`...