OpenJDK 64-Bit Server VM warning: increase O_BUFLEN in ostream.hpp -- output truncated (original) (raw)

Ioi Lam ioi.lam at oracle.com
Wed Apr 8 17:59:19 UTC 2015


On 4/8/15 8:42 AM, Thomas Stüfe wrote:

On Wed, Apr 8, 2015 at 5:27 PM, Andrew Haley <aph at redhat.com> wrote:

On 04/08/2015 04:10 PM, Thomas Stüfe wrote: Hi Andrew,

yes, it is lame. The short term answer would be to fix the expression which prints out the classpath. Where is this print statement? ostream.cpp: for (SystemProperty* p = Arguments::systemproperties(); p != NULL; p = p->next()) { xs->text()->printcr("%s=%s", p->key(), p->value()); (gdb) p p->key() $24 = 0x3ffb00016a0 "sun.boot.class.path" (gdb) p p->value() $25 = 0x3ffb00029e0 "/local/aarch64/dev/build/linux-aarch64-normal-server-slowdebug/jdk/modules/jdk.zipfs:/local/aarch64/dev/build/linux-aarch64-normal-server-slowdebug/jdk/modules/java.transaction:/local/aarch64/dev/buil"... The long term answer could be e.g.: we could implement our own printf() routines. We (SAP) actually already did this inside our JVM for parts of our own tracing system. It is not rocket science, just a bit of work. If done right, there are several advantages, among others that you do not need temporary buffers for the libc printf() to print into. Depending on interest, I could try to contribute this to the OpenJDK. In this case we don't need formatted printing at all. for (SystemProperty* p = Arguments::systemproperties(); p != NULL; p = p->next()) { outputStream *text = xs->text(); text->printraw(p->key()); text->put('='); text->printrawcr(p->value()); } works just fine. It's a bit of a kludge tho'. :-) Looks like a valid fix to me :) I agree. If the string may have an unpredictable length, it should not be printed using print_cr().

Thomas

Andrew.



More information about the hotspot-dev mailing list