RFR: 8153659: Create a CHeap backed LogStream class
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Apr 7 11:30:37 UTC 2016
Hi all,
I've updated the patch:
http://cr.openjdk.java.net/~stefank/8153659/webrev.02
The previous patch created the embedded ResourceMark after the
stringStream instance was created. I discussed the layout of the classes
with Bengt, and have decided to restructure this patch. I've changed the
code so that the ResourceMark is embedded in a new
stringStreamWithResourceMark class. This allows me to use the same
LogStreamBase class, but different stringClass template parameters, for
all three classes.
I've put the stringStreamWithResourceMark class in logStream.hpp instead
of ostream.hpp, to prevent the include of resourceArea.hpp to propagate
through the ostream.hpp header. The resourceArea.hpp file is
problematic, since it includes and uses thread.inline.hpp. The
alternative would be to move the implementation of resourceArea.hpp into
a resource.inline.hpp file, so that header files could create
ResourceMark instances, without having to include thread.inline.hpp. I'm
leaving that exercise for another RFE.
Thanks,
StefanK
On 2016-04-06 19:54, Stefan Karlsson wrote:
> Hi all,
>
> Please review this patch to add a LogStream class that allocates its
> backing buffer from CHeap memory instead of Resource memory.
>
> http://cr.openjdk.java.net/~stefank/8153659/webrev.01
> https://bugs.openjdk.java.net/browse/JDK-8153659
>
> The main motivation for this is that we can't use Resource allocated
> memory during initialization, until Thread::current() has been
> initialized. So, a CHeap backed LogStream is desirable when we
> execute, for example, the following code during large pages
> initialization:
>
> void os::trace_page_sizes(const char* str, const size_t* page_sizes,
> int count)
> {
> if (TracePageSizes) {
> tty->print("%s: ", str);
> for (int i = 0; i < count; ++i) {
> tty->print(" " SIZE_FORMAT, page_sizes[i]);
> }
> tty->cr();
> }
> }
>
> The patch restructures the code and creates a LogStreamBase template
> base class, which takes the backing outputStream class as a template
> parameter. We then have three concrete LogStream classes:
>
> LogStream - Buffer resource allocated with an embedded ResourceMark
> LogStreamNoResourceMark - Buffer resource allocated without an
> embedded ResourceMark
> LogStreamCHeap - Buffer CHeap allocated
>
> I moved the LogStream class from the logStream.inline.hpp file to
> logStream.hpp, for consistency. If that's causing problems while
> reviewing this, I can move it in a separate patch.
>
> Tested with JPRT with the TracePageSizes patch ( JDK-8152491) and
> internal VM tests.
>
> Thanks,
> StefanK
More information about the hotspot-dev
mailing list