使用Oracle java JDBC(ojdbc14 10.2.x),加载具有多行的查询需要永远(高延迟环境.显然,Oracle JDBC中的默认预取是默认大小"10",这需要每10行一次往返时间.我试图设置一个积极的预取大小,以避免这种情况.
PreparedStatement stmt = conn.prepareStatement("select * from tablename");
statement.setFetchSize(10000);
ResultSet rs = statement.executeQuery();
Run Code Online (Sandbox Code Playgroud)
这可以工作,但我得到一个内存不足的例外.我曾经假设setFetchSize会告诉它在它们进入时缓冲"那么多行",使用每行所需的RAM.如果我运行50个线程,即使使用16G的-XMX空间,它也会耗尽内存.感觉几乎像泄漏:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Array.java:70)
at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226)
at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7422)
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:983)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:273)
at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:144)
at oracle.jdbc.driver.T4C8Oall.readDCB(T4C8Oall.java:771)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:346)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3493)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
....
Run Code Online (Sandbox Code Playgroud)
我还能做些什么来获取预取但不会耗尽RAM?到底是怎么回事?
SO上最接近的相关项目是:https://stackoverflow.com/a/14317881/32453
我似乎无法编译这个程序。我的班上还有其他人在编译此代码时没有问题。我使用相同的命令尝试编译程序并将框架安装在与它们相同的目录中。/图书馆/框架。我还安装了 eclipse 并按照 zamma.co.uk 教程设置了 sdl2,但这也不起作用。这是我在编译时运行的命令
g++ -std=c++11 -o Gravity main.cpp Game.cpp Particle.cpp Point.cpp -I/Library/Frameworks/SDL2.framework/Headers -framework SDL2 -framework Cocoa
注意:我都试过了
#include <SDL.h>
Run Code Online (Sandbox Code Playgroud)
和
#include <SDL2/SDL.h>
Run Code Online (Sandbox Code Playgroud)
并且都不工作
我想做的是"重复"发送一个单独的文件(比如无数次),作为另一个程序的输入.在命令行/使用bash有没有办法?
在 Postgres 中识别和删除无效对象的可用选项有哪些
我在试图让 DateFormat 库给我一个字符串时遇到问题,该字符串的日期要格式化为 2 毫秒而不是通常的 3。我意识到这更接近厘秒,但是 afaik Java不支持。
这是一些代码来显示我遇到的问题。我希望它输出到两毫秒,但它输出三个。
public class MilliSeconds {
private static final String DATE_FORMAT_2MS_Digits = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'";
private static DateFormat dateFormat2MsDigits = new SimpleDateFormat(DATE_FORMAT_2MS_Digits);
public static void main( String[] args ){
long milliseconds = 123456789123l;
System.out.println(formatDate2MsDigits(new Date(milliseconds)));
}
public static String formatDate2MsDigits(Date date)
{
dateFormat2MsDigits.setCalendar(Calendar.getInstance(new SimpleTimeZone(0, "GMT")));
return dateFormat2MsDigits.format(date);
}}
Run Code Online (Sandbox Code Playgroud)
输出:
1973-11-29T21:33:09.123Z
我可以解析结果字符串并删除我不想要的数字,但我希望有一种更简洁的方法来实现这一点。有谁知道如何让它发挥作用,或者为什么它不起作用?
当使用SO_RECVBUF调用setsockopt时,然后转向并使用SO_RECVBUF调用getsockopt,它似乎告诉我它将缓冲区大小设置为我要求它设置的两倍.有人知道为什么会这样吗?
有问题的代码:
https://gist.github.com/rdp/8443238
输出:
setting it as 2222
[udp @ 0x1a72ec0] end receive buffer size reported is 4444
Run Code Online (Sandbox Code Playgroud)
仅在linux中,在其他操作系统上似乎将其报告为我设置的值.谢谢.
在Netflix网站上观看netflix视频时,我的目标是让用户脚本以编程方式调用播放控件.具体地说,视频的音量,电平,播放/暂停状态和时间位置.
我已经能够操纵html5视频元素本身,但直接控制它不会向用户提供所需的netflix控制栏反馈.(即视频暂停,但控制栏仍显示为播放).
到目前为止,我的方法是尝试找到代表使用普通控件时单击的"按钮"的元素,并通过用户脚本触发它们的点击事件.但我似乎无法隔离适当的元素.另外netflix使用的是javascript压缩器/混淆器,这增加了找到代表控制栏上按钮的正确元素的难度.
在这样的网站上,如何识别接收元素点击事件的元素,然后创建用户脚本以通过tampermonkey和/或greasemonkey调用它?
在下面的示例代码中,我在视图上添加了一个按钮以进行测试.
// ==UserScript==
// @name Jump a minute ahead in netflix
// @version 0.1
// @description A Test by trying to jump a minute or so ahead into a netflix movie
// @match *://www.netflix.com/*
// @grant GM_addStyle
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
var zNode = document.createElement ('div');
zNode.innerHTML = '<button id="myButton" type="button">Try It</button>';
zNode.setAttribute ('id', 'myContainer');
document.body.appendChild (zNode);
//--- Activate the newly added button.
document.getElementById ("myButton").addEventListener (
"click", ButtonClickAction, false
);
function ButtonClickAction (zEvent) {
/*--- …Run Code Online (Sandbox Code Playgroud) 如果我设置 tomcat 并从中传输静态文件,我注意到如果客户端从该套接字“暂停”(停止接收)超过 20 秒,那么 tomcat 似乎会任意切断连接(即使请求 URI 标头具有已收到且连接仍处于“已连接”状态 [客户端仍处于活动状态])。什么配置参数控制这个?文档提到但仅与初始标头解析和读取请求正文有关,而不是读取服务器的响应[connectionTimeout?]这里是否发生某种不活动超时?
它是可重现的,从任何 tomcat 应用程序流式传输(大)静态文件,并通过暂停的客户端接收它,例如 test.rb:
require "socket"
host = "localhost"
port = 8080
socket = TCPSocket.new host,port
url = "/your_webapp/large_static_filename.ext"
request = "GET #{url} HTTP/1.0\r\nHost:#{host}\r\n\r\n"
socket.print request
puts "reading"
response = socket.sysread 1_000_000
puts response.length
puts response[0..300]
puts "sleeping 25" # with 10s or several reads separated by 10s, it is OK
sleep 25
response2 = socket.read
# this should equal the total size, but doesn't... …Run Code Online (Sandbox Code Playgroud) 如何在Windows 7中获取系统的当前主卷?
我在谷歌中查了一下,但每个解决方案都返回了值,-1无论4686346是否清楚地解释了它们的含义.
java ×3
linux ×2
bash ×1
c# ×1
c++ ×1
cat ×1
date-format ×1
getsockopt ×1
greasemonkey ×1
html5-video ×1
javascript ×1
jdbc ×1
macos ×1
netflix ×1
oracle ×1
postgresql ×1
prefetch ×1
sdl-2 ×1
setsockopt ×1
sockets ×1
tampermonkey ×1
time ×1
tomcat ×1
udp ×1
visual-c++ ×1
webstorm ×1
windows ×1